711问题集
- 1.The local variable conn may not have been initialized
局部变量没有初始化问题?
局部变量在进行读取操作之前必须进行初始化或进行赋值操作,否则会出现编译错误.
- 2.连接数据库代码
package com.zsz.develop.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class BaseConnection {
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "SF948640.");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
}
- 3.为什么静态类方法可以直接调用?
这是因为静态类方法实际上属于类,不同任何类实例相关,也不允许访问任何实例属性;因此这些方法可以共享,可以直接调用;而普通方法需要同类实例相关,因此必须在对应的实例中访问。
public static void main(String[] args) {
//当connection成为静态时、就可以直接调用。
// Connection conn=new BaseConnection().getConnection();
Connection conn=BaseConnection.getConnection();
System.out.println(conn);
}
- 4.PreparedStatement和Statement的使用
PreparedStatement和Statement都是SQL执行器对象。PreparedStatement 对象已预编译过(所以第一次执行花费更多时间),所以其执行速度要快于 Statement 对象。
JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.
- 5.结果集(ResultSet)用法
ResultSet,数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet里面是一个指针数据,他首先指向0位置,也就是标题。当他使用next()时。他读取的才是真正的数据。然后通过0位置的标题对比逐个取出数据
简单实例
public ArrayList<UserInfoDao> getList(){
ArrayList<UserInfoDao> arrayList=new ArrayList<UserInfoDao>();
Connection conn=BaseConnection.getConnection();
//sql执行器Statement
PreparedStatement ps=null;
//ResultSet结果集对象
String sql="select * from userinfo";
try {
ps=ps=(PreparedStatement) conn.prepareStatement(sql);
rs =ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name")+"-----");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arrayList;
}
把他存进实体类,再读取出来的案例
package com.zsz.develop.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import com.mysql.jdbc.PreparedStatement;
import com.zsz.develop.bean.UserInfo;
import com.zsz.develop.util.BaseConnection;
public class UserInfoDao {
public ArrayList<UserInfo> getList(){
ArrayList<UserInfo> arrayList=new ArrayList<UserInfo>();
Connection conn=BaseConnection.getConnection();
PreparedStatement ps=null;
String sql="select * from userinfo";
try {
ps=(PreparedStatement) conn.prepareStatement(sql);
ResultSet rs =ps.executeQuery();
while (rs.next()) {
// System.out.println(rs.getString("name")+"-----");
//把数据封装到实体类
UserInfo userInfo=new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setName(rs.getString("name"));
userInfo.setPassword(rs.getString("password"));
//再把封装好的对象放到我们的集合中去
arrayList.add(userInfo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arrayList;
}
//添加再其他地方既可以使用。
// public static void main(String[] args) {
// ArrayList<UserInfo> arrayList= new UserInfoDao().getList();
// //用新型for循环把他打印出来
// for(UserInfo userInfo:arrayList){
// System.out.println(userInfo.getId()+" "+userInfo.getName()+" "+userInfo.getPassword());
// }
// }
}