JDBC中的批量插入和乱码解决

字符集-乱码问题

用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生。解决办法当时是在使用JDBC的时候指定和数据库一样的字符集。我们可以在DB_URL字符串后加上”?characterEncoding=XXX”的方式指定JDBC使用的字符集。

同时,我们需要知道MySql中使用的字符集,可以通过以下两个命令获取。

1)      show variables like '%character%';获取数据库或者整个服务器使用的字符集。

可以看到,上面截图显示笔者整个数据库服务器以及当前数据库使用的都是GBC编码。

2)      show create table user; 获取user表使用的字符集

上面截图显示当前user表使用的字符集也是gbk。其实,我们还可以对每一个列设置字符集。

那么这几个级别的字符集,到底用的哪一个呢?其实他们是有优先级的:

Column> Table> Database > Server

批量插入问题

有些时候我们需要向数据库中插入一大批数据,如果单纯的使用普通SQL语句一条一条向数据库插入呢效率会非常慢。这个时候我们就可以利用Statement的批量插入数据接口来实现功能。

示例代码:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

class User

{

private String userid;

private String name;

private String password;

public User(String userid, String name, String password)

{

this.setUserid(userid);

this.setName(name);

this.setPassword(password);

}

public String getUserid()

{

return userid;

}

public void setUserid(String userid)

{

this.userid = userid;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public String getPassword()

{

return password;

}

public void setPassword(String password)

{

this.password = password;

}

}

public class Hello

{

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

static String DB_URL = "jdbc:mysql://localhost:3306/mldn";

static final String USERNAME = "root";

static final String PASSWORD = "admin";

public static void main(String a[])

{

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

List<User> listUser = Hello.getUser();

try

{

//加载驱动

Class.forName(JDBC_DRIVER);

//获取链接

DB_URL += "?characterEncoding=gbk";

conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);

//执行SQL语句

stmt = conn.createStatement();

for(User item : listUser)

{

stmt.addBatch("INSERT INTO user(userid,name,password) VALUES('"+item.getUserid()+"','"+item.getName()+"','"+item.getPassword()+"');");

}

stmt.executeBatch();

stmt.clearBatch();

}

//异常处理

catch (ClassNotFoundException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

finally

{

//资源清理

try

{

conn.close();

stmt.close();

rs.close();

}

catch(Exception e)

{

//ignore exceptions when closing.

}

}

System.out.println("///Done~~");

}

public static List<User> getUser()

{

List<User> userList = new ArrayList<User>();

userList.add(new User("cyx", "陈奕迅", "cyx999"));

userList.add(new User("zjl", "ZHOU JIELUN", "zjl123"));

userList.add(new User("cjk", "苍井空", "cjk520"));

userList.add(new User("ly", "LIU YAN", "ly1988"));

return userList;

}

}

上一篇:laravel的启动过程解析


下一篇:jar 包的认识与处理、jar 文件 war 文件以及 ear 文件