字符集-乱码问题

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

}

}

JDBC中的批量插入和乱码解决的更多相关文章

  1. JabRef中添加中文文献出现乱码 解决方法

    JabRef中添加中文文献出现乱码 解决方法     问题描述 JaBRef是一款开源的文献管理软件,主要用来管理bibtex格式的参考文献,可以与LATEX配合使用,方便论文参考文献的使用.文献管理 ...

  2. Delphi+MySQL:TADOQuery使用插入中文乱码解决方法

    Delphi+MySQL:TADOQuery使用插入中文乱码解决方法 with adoquery dobeginclose;sql.clear;sql.text:=' insert into test ...

  3. MySQL数据库插入中文乱码解决方法

    在mysql数据库中,插入中文数据时,会出现乱码的现象. 我的测试方法: 首先用Navicat for MySql 插入一行数据,带有中文的. 再用mysql命令行来查看插入的数据,看是否出现乱码. ...

  4. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  5. .Net中DataAdapter批量插入和更新数据总结

    前言 前段时间一直在忙着项目上线,在做项目的同时遇到了一些之前不曾碰到的问题,因为没有经验,只能从网上找一些相关的解决方案,但是网上提供的资料实在是太杂,有的根本不能用,耗时又耗力. 我希望把我这段时 ...

  6. Delphi中SQL批量插入记录

    http://www.cnblogs.com/azhqiang/p/4050331.html 在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式:   1.  ...

  7. 【JDBC核心】批量插入

    批量插入 批量执行 SQL 语句 当需要成批插入或者更新记录时,可以采用 Java 的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC 的批量 ...

  8. 使用JDBC在MySQL数据库中快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...

  9. PLSQL往表中插入中文乱码解决办法

    1.查看服务器端编码:select userenv('language') from dual; 2.查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第一步得到 ...

随机推荐

  1. C# 如何通过拼接XML调用存储过程来优化系统性能

    平常新增多条记录,需要多次访问数据库,这样会影响性能:如果把新增的数据拼接成XML形式,作为参数传给存储过程来处理,这只访问数据库一次,执行速度会快很多. 1.C#代码如下:XML拼接的字段不能出现& ...

  2. 剑指offer系列39-----矩阵中的路径

    [题目]请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径. * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子. * 如果一条路径经 ...

  3. 【Redis】使用Redis Sentinel实现Redis HA

    阅读目录 1 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 18000 sent ...

  4. Import SHA2 SSL cert to Windows IIS7

    Import SHA2 SSL cert to Windows IIS7 1.You will get 3 piece of certs from GeoTrust, and save them to ...

  5. Android SDK 4.0.3 开发环境配置及运行

    最近又装了一次最新版本的ADK环境 目前最新版是Android SDK 4.0.3 本文的插图和文本虽然是Android2.2的 步骤都是一样的,如果安装的过程中遇到什么问题,可以留言,我会尽快回复! ...

  6. mousewheel滚轮事件 浏览器的写法

    鼠标的滚轮事件,在Jquery中有对应的一个插件:https://github.com/brandonaaron/jquery-mousewheel 原生的滚轮事件:火狐与其他浏览器使用了不同的事件 ...

  7. Html4与Html5的关键区别

    HTML5是下一代HTML标准版本,4与5有很多相同之处,有HTML从头构建,比4升级到5要方便. 以下是10个关键区别: 1.HTML5最近很火,但是标准还在制定,4则十年之多了,不会6变: 2.简 ...

  8. Hibernate与MyBatis区别

    Hibernate是当前主流的ORM框架,对数据库结构提供了较为完整的封装. MyBatis同样也是非常流行的ORM框架,主要在于pojo与SQL之间的映射关系. 区别: 1.两者最大的区别 针对简单 ...

  9. JQuery validate 在IE兼容模式下出现 js错误(成员找不到)的修正:

    JQuery validate 在IE兼容模式下 下出现 js错误(成员找不到)的修正: // Add novalidate tag if HTML5. //this.attr( "nova ...

  10. CF577B Modulo Sum 好题

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...