无法更新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三列
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(); } } }}