字符集-乱码问题
用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; } } |