运行不出来 出现错误 老师看下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | package com.imooc.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class JDBCDemo3 { @Test public void demo3(){ ResultSet rs = null ; Statement stmt = null ; Connection conn = null ; try { //加载驱动 Class.forName( "com.mysql.jdbc.Driver" ); //获得链接 conn = DriverManager.getConnection( "jdbc:mysql:///jdbctest2?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8" , "root" , "99189" ); //获得执行SQL语句对象 stmt = conn.createStatement(); //编写SQL语句 String sql = "insert into goods value(null,'耳机','200.0','蓝牙耳机')" ; String sql2 = "select * from goods" ; //执行SQL语句 int i = stmt.executeUpdate(sql); if (i > 0 ) { rs = stmt.executeQuery(sql2); while (rs.next()) { int id = rs.getInt( "id" ); String name = rs.getNString( "name" ); String price = rs.getNString( "price" ); String desp = rs.getNString( "desp" ); System.out.println(id+ " " +name+ " " +price+ " " +desp); } } else { System.out.println( "添加失败" ); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //释放资源 if (rs != null ) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } rs = null ; } if (stmt != null ) { try { stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } stmt = null ; } if (conn != null ) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } conn = null ; } } } } |
正在回答
同学你好,这俩个方法都是指以String形式获取此ResultSet对象的当前行中指的的值,使用getString()查询属性不为字符串时,会先隐形调用toString,而getNString()不会;所以同学这里使用getString()或者getFloat()都可以
祝学习愉快
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package com.imooc.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class JDBCDemo3 { @Test public void demo3(){ ResultSet rs = null ; Statement stmt = null ; Connection conn = null ; try { //加载驱动 Class.forName( "com.mysql.cj.jdbc.Driver" ); //获得链接 conn = DriverManager.getConnection( "jdbc:mysql:///jdbctest2?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8" , "root" , "99189" ); //获得执行SQL语句对象 stmt = conn.createStatement(); //编写SQL语句 String sql = "insert into goods3 value(null,'耳机','200.0','蓝牙耳机')" ; String sql2 = "select * from goods3" ; //执行SQL语句 int i = stmt.executeUpdate(sql); if (i > 0 ) { rs = stmt.executeQuery(sql2); while (rs.next()) { // int id = rs.getInt("id"); String name = rs.getNString( "name" ); String price = rs.getNString( "price" ); String desp = rs.getNString( "desp" ); System.out.println(name+ " " +price+ " " +desp); } } else { System.out.println( "添加失败" ); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //释放资源 if (rs != null ) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } rs = null ; } if (stmt != null ) { try { stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } stmt = null ; } if (conn != null ) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } conn = null ; } } } } |
错误提示:
java.sql.SQLException: Can not call getNString() when field's charset isn't UTF-8
at com.mysql.cj.jdbc.result.ResultSetImpl.getNString(ResultSetImpl.java:1043)
at com.mysql.cj.jdbc.result.ResultSetImpl.getNString(ResultSetImpl.java:1050)
at com.imooc.jdbc.demo1.JDBCDemo3.demo3(JDBCDemo3.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
同学你好,老师运行代码,报错信息是Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
加载类“com.mysql.jdbc.Driver”。这是弃用。新的驱动程序类是' com.mysql.cj.jdbc.Driver'。
如上所示内容可知,新的驱动是com.mysql.cj.jdbc.Driver,同学的mysql版本是8吧,如果是,同学可以修改注册驱动为com.mysql.cj.jdbc.Driver ,修改后再来尝试一下。
老师测试修改后可正常运行并显示数据
如果同学运行还有别的错误,建议同学将报错信息贴出
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧