运行不出来 出现错误 老师看下代码

运行不出来 出现错误 老师看下代码

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;
			}
		}
		
		
	}

}


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,这俩个方法都是指以String形式获取此ResultSet对象的当前行中指的的值,使用getString()查询属性不为字符串时,会先隐形调用toString,而getNString()不会;所以同学这里使用getString()或者getFloat()都可以

祝学习愉快

好帮手慕阿园 2020-08-29 15:13:02

同学你好,错误显示当字段的字符集不是utf-8时,无法调用getnstring()方法

所以需要同学将数据库表中所有字段都设置成utf-8,可以使用如下语句设置

alter table `表名` convert to character set utf8

或者同学可以看看报错语句是否是String price = rs.getNString("price");语句

如果是,可以使用如下语句

float price = rs.getFloat("price");

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 muke_xinke #1
    老师你看下我在回复里贴出来的代码和错误提示 我把getNString改成getString就可以了 这俩有什么区别呢 什么情况下用getNString什么情况下用getString呢
    2020-08-29 15:25:25
提问者 muke_xinke 2020-08-29 11:49:18
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)



http://img1.sycdn.imooc.com//climg/5f49d0360908edc407360414.jpg

好帮手慕阿园 2020-08-29 10:16:35

同学你好,老师运行代码,报错信息是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 ,修改后再来尝试一下。

http://img1.sycdn.imooc.com//climg/5f49ba3b0950fab605880123.jpg

老师测试修改后可正常运行并显示数据

如果同学运行还有别的错误,建议同学将报错信息贴出

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 muke_xinke #1
    老师你看下 我把表和代码 还有错误代码贴出来了 一直提示这个错误咋解决啊
    2020-08-29 11:51:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师