Java连接mysql详解&解决乱码

来源:互联网 发布:minecraft 源码 unity 编辑:程序博客网 时间:2024/05/21 09:29

 

 

解决java插入数据到数据库乱码问题

 

将原来的

jdbc:mysql://localhost:3306/YourDb

改为

jdbc:mysql://localhost:3306/YourDb?useUnicode=true&characterEncoding=UTF-8

做完以上工作后,插入到mysql的中文应该不会再是乱码了.

 

来自 <http://blog.csdn.net/fancylovejava/article/details/9229941>

 

 

 

1、加载JDBC驱动程序

在连接数据库之前,首先加载想要连接的数据库的驱动,即使数据库厂商提供的jar包,这通过java.lang.Class类的静态方法实现

 

Try{

Class.forName("com.mysql.jdbc.Driver");

 

System.out.println("成功加载驱动")

}catch(ClassNotFoundException e){

System.out.println("找不到驱动程序类,加载驱动失败")

e.printStackTrace();

}

成功加载后,会将Driver类的实例注册到DriverManager类中,在下一步,就可以直接调用类中的方法

 

 

2.创建数据库的连接

要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,

该对象就代表一个数据库的连接

使用DriverManagergetConnection(String url,String username,String password )

来获得路径,用户名,密码

 

String url="jdbc:mysql://localhost:3306/test";

String username="root";

String password="root";

try{

Connection con=DriverManager.getConnection(url,username,password);

System.out.println("数据库连接成功");

 

}catch(SQLExceptionse){

System.out.println("数据库连接失败");

se.printStackTrance();

}

 

也可以直接把用户名和密码附在url

jdbc:mysql://localhost:3306/test?username=root&password=root;

3.创建一个Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为一下3种类型

1)、执行静态SQL语句,通常通过Statement实例实现

2)、执行动态sql语句,通常通过PreparedStatement实例实现

(当查询中的栏位,表或者条件等不确定,或者是变量时,就需要使用动态SQL,因为此时,无法写出静态的(也就是固定的)SQL)

3)、执行数据库存储过程,通常通过CallableStatement实例实现

实现方式

1Statementstmt=con.createStatement();

2PrepareStatement pstmt=con.preparaedStatement(sql);

3CallableStatement cstmt=con.prepareCall("{CALLdemoSp(?,?)}");

4.执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQueryexecuteUpdateexecute

(1)ResultSet executeQueryString sqlString):执行查询数据库的SQL语句,返回一个结果集对象

(2)int executeUpdateString sqlString):用于执行INSERTUPDATEDELETE语句以及SQL

DDL语句,如:create tabledrop table

(3)executesqlString)用于执行返回多个结果集、多个更新计数或二者组合的语句

具体实现代码

1ResultSetrs=stmt.executeQuery("SELECT * FROM …")

2introws=stmt.executeUpdate("Insert INTO…")

3booleanflag=stmt.execute(String sql);

 

 

5、处理结果

两种情况

1、执行更新返回的是本次操作影响到的记录数

2、执行查询返回的结果是一个ResultSet对象

具体实现代码

While(rs.next()){

String name=rs.getString("name");

String pass=rs.getString(1);

 

}

6、关闭JDBC对象

操作结束后要把所使用的JDBC独享全都关闭,以释放JDBC资源,关闭顺序和生命顺序相反

1)关闭记录集

2)关闭生命

3)关闭连接对象

具体实现

If(rs!=null){

//关闭记录集

Try{

rs.close

}catch(SQLException e){

e.printStackTrance();

}

}

 

 

If(stmt!=null){

Try{

stmt.close

}catch(SQLException e){

e.printStackTrance();

}

}

 

 

If(con!=null){

Try{

con.close

}catch(SQLException e){

e.printStackTrance();

}

}

 

 

 

0 0
原创粉丝点击