读书人

无法更新excel数据库!该如何解决

发布时间: 2012-02-09 18:22:27 作者: rapoo

无法更新excel数据库!!
帮比人的一个小忙,需要高效的更新数据库中的内容。没怎么用过,就学了一下,出现问题了
mport java.sql.*;
public class database
{
private static String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
private static String dbURL = "jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=C:\\Documents and Settings\\Administrator\\桌面\\example.xls";
private static Connection dbConn = null;
public static void main(String[] args)
{
try
{
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, "", "");
Statement smt = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet set = smt.executeQuery("select * from [sheet1$]");
while (set.next())
{
System.out.print(set.getString(1) + "\t");
System.out.print(set.getString(2) + "\t");
System.out.println(set.getString(3));
}
set.absolute(2);
[color=#FFFF00]set.updateString(3, "teacher");
set.refreshRow();
System.out.print(set.getString(3)); [/color] } catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
try
{
dbConn.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}

}
}

问题就是 能够正确的输出数据表中的内容 ,但是却不能更新!颜色部分区域是更新的语句!!请教各位!!

[解决办法]
String sql="你要更新的sql语句";
ResultSet set = smt.executeUpdate("sql");
看一下这个可以吗?
[解决办法]
你没有办法更新数据库的原因有以下几个
1.DBQ没有指定readonly=false,默认情况下excel作为数据源是只读的属性
2.你用的更新方法是可更新的结果集ResultSet而不是直接的JDBC操作,这种更新方法当数据库不支持可更新结果集的时候不给力(我不确定excel支持否)。但是这种方法要求查询要包含数据表主键,excel没法指定主键,所以肯定无法更新
3.还有在中午系统下没有指定好编码
下面给你贴一个可以更新的例子,example的列有c1 c2 c3三列

Java code
import java.sql.*;import java.util.Properties;public class Database {    private static String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";    private static String dbURL = "jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=C:\\Documents and Settings\\Administrator\\桌面\\example.xls;READONLY=FALSE";    private static Connection dbConn = null;    public static void main(String[] args) {        try {            Class.forName(driverName);                        Properties p=new Properties();            p.put("charSet", "gbk");            dbConn = DriverManager.getConnection(dbURL, p);//            dbConn = DriverManager.getConnection(dbURL, "", "");            Statement smt = dbConn                    .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                            ResultSet.CONCUR_UPDATABLE);            ResultSet set = smt.executeQuery("select * from [sheet1$]");            while (set.next()) {                System.out.print(set.getString(1) + "\t");                System.out.print(set.getString(2) + "\t");                System.out.println(set.getString(3));            }//            set.absolute(2);//            set.updateString(3, "teacher");//            set.updateRow();            //这里不能被更新的结果是因为用的ResultSet的可滚动结果集            //而ResultSet的可滚动结果集能更新完成SQL操作有种种的限制            //比如至少SQL的查询结果要包含表的主键            //而Excel的表无法指定主键            String insert="insert into [sheet1$](c1,c2,c3) " +                    "values('newA','newB','newC')";            smt.execute(insert);            //            set.refreshRow();//            System.out.print(set.getString(3));        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        } finally {            try {                dbConn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }} 

读书人网 >Eclipse开发

热点推荐