JDBC连接MySql,数据操作:
加载Mysql数据驱动(非必须步骤) Class.forName(“com.mysql.jdbc.Driver”);
创建数据库连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull",
"数据库用户名", "数据库密码");写sql语句:String sq = “”;
创建执行sql的Statemen对象: Statement st = conn.createStatement();
执行sql:st.execute***(sql);
查询
ResultSet rs = st.executeQuery(sql);
while(rs.next()){}
更新,删除,插入:
int count = st.executeUpdate(sql);返回值是表示数据库操作成功的条数
- 数据库关闭:conn.close();
static Statement st;
public static void main(String[] args) {
//先要获取连接,即连接到数据库
Connection conn = getConnection();
//insert(conn);//插入数据
query(conn);//查询数据
//update(conn);//更新数据
//delete(conn);//删除数据
}
//查询
private static void query(Connection conn) {
Statement st;
try {
String sql = "select * from t_user"; // 查询数据的sql语句
st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量
ResultSet rs = st.executeQuery(sql); //执行sql查询语句,返回查询数据的结果集
System.out.println("最后的查询结果为:");
while (rs.next()) { // 判断是否还有下一个数据
// 根据字段名获取相应的值
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
String password = rs.getString("password");
String sex = rs.getString("sex");
//输出查到的记录的各个字段的值
System.out.println(id + " " + age + " " + name + " " + password + " " + sex);
}
conn.close(); //关闭数据库连接
} catch (Exception e) {
System.out.println("查询数据失败");
}
}
//插入
private static void insert(Connection conn){
try {
String sql = "insert into t_user(id,age,name,password,sex) values(1,10,'zhhangsan','111111','man')";
st = conn.createStatement();//创建用于执行sql语句的Statement对象
int count = st.executeUpdate(sql);//执行sql语句,返回的是更新数据的条数
System.out.println("往数据库中插入了 " + count + "条数据");
}catch (Exception e){
System.out.println(e.getMessage());
}
}
//删除
private static void delete(Connection conn){
try {
//sql语句
String sql = "delete from t_user where id = 1";
//生成执行sql的Statement对象
st = conn.createStatement();
//执行sql语句
int count = st.executeUpdate(sql);
System.out.println("删除了 " + count + " 条数据");
}catch (Exception e){
System.out.println(e.getMessage());
}
}
//修改
private static void update(Connection conn){
try {
//写sql
String sql = "update t_user set password='222222' where id=1";
//生成Statement对象
st = conn.createStatement();
//执行sql
int count = st.executeUpdate(sql);
System.out.println("更新了 " + count + " 条数据");
}catch (Exception e){
System.out.println(e.getMessage());
}
}
//数据库连接
private static Connection getConnection() {
Connection conn = null; //创建用于连接数据库的Connection对象
try {
Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动,非必须
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/erp", "root", "root");// 创建数据连接
} catch (Exception e) {
System.out.println("数据库连接失败" + e.getMessage());
}
return conn;
}
解释
1、为什么说Class.forName是非必须的
在java中只有类被使用的时候才会被加载(加载:读取字节码,执行static块)
而Class.forName的作用·呢就是加载对应名称的类
所以,在这里Class.forName这里是是保证了在执行DriverManager.getConnection时,对应的com.mysql.jdbc.Driver已经在JVM中了
在JDBC4.0之后,DriverManager会自动去读取jdbc.Driver中的信息,同时getConnection会自动调用server provider(服务器供应商)去获取信息
即,说明了只要你的JDBC包含了驱动信息,是可以不用Class.forName这个方法
那么在什么情况会需要这个呢?
a、jdk1.6以下的版本
b、JDBC4.0以下的版本
PS:在研究使用idea+mave工具,顺便带上依赖包的: