Java-mysql连接-并处理连接中字符的问题

一、数据库中创建表指定引擎并指定字符集

    -- 指定存储引擎和字符集 --
create table `test`.`users`(
    id int primary key,
    name varchar(40),
    password varchar(40),
    email varchar(60),
    birthday date
)engine=InnoDB default CHARSET = utf8;

我尝试过,在这个5.7的版本如果不指定字符集的话,insert进去中文会提示报错信息,所以为了以后的工作还是先记下来。

二、Java连接数据库语句

//		在此处设置连接字符集,如果不设置连接字符集,那么连接的时候会出现,使用预编译的查询但是传递参数后得不到想要的结果。
		String url = "jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
		String username = "lxj";
		String password = "123456";
		/*
		 * 1、加载驱动
		 * 2、获取连接
		 * 3、获取statement对象
		 * 4、向数据库发送sql语句
		 * 5、从结果集中获取数据
		 */
		Connection conn = null;
		java.sql.PreparedStatement ps = null;
		ResultSet rs = null;
		String sql =null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, username, password);
//			或者(不推荐)
//			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			
			ps = conn.prepareStatement("select * from users where name = ?");
			ps.setString(1, "李二");
			rs = ps.executeQuery();
			while(rs.next()) {
				System.out.println("id="+rs.getObject("id"));
				System.out.println("name="+rs.getObject("name"));
				System.out.println("password="+rs.getObject("password"));
				System.out.println("email="+rs.getObjectuseUnicode=true&characterEncoding=UTF-8("email"));
				System.out.println("birthday="+rs.getObject("birthday"));
			}
			rs.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

在这里值得注意的有两点,一个是SSL连接设置为true,不设置的话mysql会提醒,第二个,在连接属性中设置字符集,我做过测试,加入不设置,我用预编译的方式写sql,设置了参数后,却得不到正确的结果。

三、常用类方法说明

Connection类

    代表连接的类,与数据库进行交互就靠这类了,可以获取statement类。设置commit属性

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql):创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit():在链接上提交事务。
  • rollback():在此链接上回滚事务。

Statement类

sql语句相关的类,分为statement和preparestatement两种,后者采用预编译的方式处理sql,可动态的填写参数

  • setXxx(index,val);设置参数,从1开始
  • executeQuery(String sql):用于向数据库发送查询语句。
  • executeUpdate(String sql):用于向数据库发送insert、update或delete语句。
  • execute(String sql):用于向数据库发送任意sql语句。
  • addBatch(String sql):把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

ResultSet类

        ResultSet对象维护了一个指向表格数据行的 游标,初始的时候,游标在第一行之前,调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

  • 获取任意类型的数据
    • getObject(int index)
    • getObject(string columnName)
  • 获取指定类型的数据,例如:
    • getString(int index)
    • getString(String columnName)

    Java-mysql连接-并处理连接中字符的问题_第1张图片

总结,看来字符集的坑处处都有啊!!


你可能感兴趣的:(Java-mysql连接-并处理连接中字符的问题)