问题1: 当我在public void actionPerformed(......)事件里面,对数据库作操作
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:dbbank";
Connection db=DriverManager.getConnection(url);
Statement st=db.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=st.executeQuery("select * from employee"); 之后,我又作了
ResultSet rs2=st.executeQuery("insert into employee vaules(.........)");
rs2.close();rs.close();st.close();db.close(); //注意,以上都可以成功,但改为以下代码就不是了 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:dbbank";
Connection db=DriverManager.getConnection(url);
Statement st=db.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=st.executeQuery("select * from employee"); 之后,我又作了
ResultSet rs2=st.executeQuery("insert into employee vaules(.........)"); rs2.close(); ResultSet rs3=st.executeQuery("insert into employee vaules(.........)");
rs3.close();
rs.close();st.close();db.close();
//注意rs,rs2的操作都可以完成,但rs3的操作酒不可以,请大家帮忙解答一下!
//我自己在ResultSet rs3=st.executeQuery("insert into employee vaules(.........)");之前,从新建立一个新的数据连接,
结果也不行。问题2:
当我执行问题1中的ResultSet rs2=st.executeQuery("insert into employee vaules(.........)");如果我在values()里面输入中文,之后,
再到sqlserver中察看结果,会发现,在因该显示中文数据的那个字段为乱码,但在sql server2000的查询分析器里,执行insert........
的相同sql语句,就可以显示正常的中文????我的表里的那个字段为nchar类型,请大家解答!

解决方案 »

  1.   

    由于java和sql中的中文编码是不相同的.java转到sql中回截取部分因此会出现乱码!你应该在java中对中文编码进行转换string str2=String(str1.getBytes(),"iso-8859-1")就可以了!
      

  2.   

    谢谢 楼上这位兄弟!!
    可是第一个问题呢,有人知道么??不会把,偌大个csdn,难道?
      

  3.   

    建议你在数据库连接时就指定iso-8859-1或gbk,就不要每次都string str2=String(str1.getBytes(),"iso-8859-1")了
      

  4.   

    老兄:st.executeQuery??
    insert,update时好像用executeUpdate(),返回是int
      

  5.   

    我的这个程序,没有错误!!可以运行!但就是在第3个插入数据的代码,不执行。我去数据库看,没有插入,而前两个数据库纪录集的操作都可以在数据库中找到结果!还有,楼上的nake兄弟说的在数据库连接时候指定iso-8859-l或gbk,是什么东西?如何指定啊?
      

  6.   

    ResultSet rs3=st.executeQuery("insert into employee vaules(.........)");
    ---------------------------------------
    int len3 = st.executeUpate();还差不多,如果updateQuery,设计也....
      

  7.   

    还有,楼上的nake兄弟说的在数据库连接时候指定iso-8859-l或gbk,是什么东西?如何指定啊?
      

  8.   

    同意 冰糖葫芦的说法.
    JDBC的官方网站好像提到了这个问题哦.
      

  9.   

    ResultSet rs2=st.executeQuery("insert into employee vaules(.........)");
    可以吗
    那你都换成st.executeUpdate("insert into employee vaules(.........)");试试
    数据库的字符集采用的是ISO-8859-1
    windows xp 下jvm默认字符集采用的是GBK你要每次操作的时候要转换一下
      

  10.   

    insert这样的操作用的着赋值给resultset吗?多余吧
    直接st.executeUpdate("insert .....")
      

  11.   

    谢谢大家,我已经知道了可以用st.executeUpdate()来做了!!
    但是我还是不知道楼上的nake兄弟说的在数据库连接时候指定iso-8859-l或gbk,是什么东西?如何指定啊?
      

  12.   

    你应该在把东西存入数据库前做下处理,假如你得到的一个字符串类型的变量名为String aaa,现在你要把这个aaa变量存入数据库,则应该转换下:String x=new String(aaa.getBytes("iso_8859_1"),"GBK");
      

  13.   

    国际化的问题不止是数据库,凡是涉及I/O的地方要想中文漂漂亮亮的显示,是要做一定处理D
      

  14.   

    谢谢大家,我已经知道了可以用st.executeUpdate()来做了!!
    但是我还是不知道楼上的nake兄弟说的在数据库连接时候指定iso-8859-l或gbk,是什么东西?如何指定啊?
    --------------------------
    字符集的问题很麻烦,不是那么简单,
    1,sun的jvm缺省的字符集是UTF-8
    2,system.out.println();这样的函数会做一个默认转化 UTF-8 -> XXX,XXX表示你的local的默认字符集,比如zh_CN默认是GBK
    3,在ORACLE中可以用
    select * from v$NLS_PARAMETERS
    察看你的当前数据库的字符集,别的数据库怎么看你可以自己查查。
      

  15.   

    最好一个Statement执行一条SQL语句
      

  16.   

    不同的driver有不同的指定方法,不过大同小议
    比如com.inet.tds.TdsDriver
    的设置
    jdbc:inetdae:192.168.200.21:1433?database=hr&charset=GBK&user=sa&password=
    你就不用担心中文的问题了
    像什么string str2=String(str1.getBytes(),"iso-8859-1")之类的多麻烦啊
      

  17.   

    不明白为什么st.executeQuery不行,我觉得这不是你程序有问题,而是数据库的问题,你可以throw以下,看看是不是报什么错。