运行不出来 出现错误 老师看下代码
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()都可以
祝学习愉快
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积分~
来为老师/同学的回答评分吧
0 星