首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

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

2012-02-09 
无法更新excel数据库!!帮比人的一个小忙,需要高效的更新数据库中的内容。没怎么用过,就学了一下,出现问题了

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

热点排行