一、加载驱动:
new com.mysql.jdbc.Driver();或者Class.forName(“com.mysql.jdbc.Driver”);
二、连接数据库:
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","root", "密码");
三、访问操作:
Statement state=con.createStatement();
String sql="...SQL语句.......";
state.(各种执行函数加入str语句就好了);
java中的ResulrSet可以用于存储数据库执行之后的结果集;
四、关闭链接:
各种close();
以下是个样例代码(其中使用了一些自己定义的类,如user,book等):
package Members;
import java.sql.*;
import java.util.ArrayList;
import java.util.Comparator;
import Frame.Top;
public class MyDatabase {
public ResultSet result;
private Connection con;
private Statement state;
ArrayList<Book> books=new ArrayList<Book>();
ArrayList<Attention> attentions=new ArrayList<Attention>();
/*
* 以下为两种连接数据库的方式,
* root登陆、游客和顾客登陆
*/
public MyDatabase(){
try{
new com.mysql.jdbc.Driver();
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/SecondMarket","user", "passwords");
state=con.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
public MyDatabase(String name,String passwords) {
try{
new com.mysql.jdbc.Driver();
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/SecondMarket", name, passwords);
state=con.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
/*
* 根据传入的字符串执行select语句
* 字符串数组第一位表示表名字,其他各位分别代表
* 要查询的属性名称
*/
public void Query(String[] mems) throws SQLException{
String sql="select "+mems[1];
for(int i=2;i<mems.length;i++)
sql+=","+mems[i];
sql+=" from "+mems[0];
System.out.println(sql);
result=state.executeQuery(sql);
}
/*
* 根据传入的sql语句,执行相应的更新操作
* 成功执行返回true,执行失败返回false
*/
public boolean Update(String sql){
try {System.out.println(sql);
state.execute(sql);
return true;
} catch (SQLException e) {
return false;
}
}
/*
* 关闭数据库连接
*/
public void closeDatabase() throws SQLException{
result.close();
state.close();
con.close();
}
/*
* 将Query()函数所执行的sql语句所得到的resultset
* 转化成二位字符串数组并将其返回
*/
public String[][] ResultToarray() throws SQLException{
result.last();
String[][] str=new String[result.getRow()][result.getMetaData().getColumnCount()];
result.beforeFirst();
int i=0;
while(result.next()){
for(int j=0;j<str[i].length;j++)
str[i][j]=result.getString(j+1);
i++;
}
result.first();
return str;
}
/*
* 从数据库中的book表中将所有的书籍信息读出来
* 放到book数组中(无返回值)
*/
public void GetBooks() throws SQLException{
String sql="select * from book";
ResultSet r=state.executeQuery(sql);
books.clear();
while(r.next()){
books.add(new Book(r.getString(1),r.getString(2),r.getString(3), r.getString(4), r.getDouble(5),r.getInt(6), r.getInt(7), r.getString(8), r.getString(9), r.getString(10), r.getInt(11), r.getDouble(12), r.getString(13)));
}
}
/*
* 将图书按照打折从小到大排序,这里由于
* 打折排序不涉及表的连接,所以是对读出来的
* 书籍直接排序,没有在数据库表中进行操作
*/
public boolean SortBooksByDiscount(){
try{
if(books.size()<1)
GetBooks();
books.sort(new Comparator<Book>() {
public int compare(Book a,Book b){
if(a.getDiscount()>b.getDiscount())
return 1;
return -1;
}
});
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
/*
* 将图书按照销售量从大到小排序
* 同样,由于没有涉及表的连接,所以这里也是直接用代码排序
*/
public boolean SortBooksBySold_number(){
try{
if(books.size()<1)
GetBooks();
books.sort(new Comparator<Book>() {
public int compare(Book a, Book b) {
if(a.getSold_number()>b.getSold_number())
return -1;
return 1;
}
});
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
/*
* 按照书籍的关注量从大到小排序,由于这步操作需要将表attention和book连接起来
* 所以使用sql语句直接访问数据库
*/
public boolean SortBooksByAttention(){
try{
String sql="create table temp select book_id,count(user_id) as 'num' from attention group by book_id order by 'num' desc";
state.execute(sql);
sql="select book.* from book left join temp on book.book_id=temp.book_id order by num desc";
ResultSet r=state.executeQuery(sql);
sql="drop table temp";
books.clear();
while(r.next()){
books.add(new Book(r.getString(1),r.getString(2),r.getString(3), r.getString(4), r.getDouble(5),r.getInt(6), r.getInt(7), r.getString(8), r.getString(9), r.getString(10), r.getInt(11), r.getDouble(12), r.getString(13)));
}
state.execute(sql);
}catch(Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/*
* 执行买书操作,其中funforsellbook是一个在数据库中自定义的一个函数
* 买书成功返回true,失败则返回false
*/
public boolean GetBook(String book_id,int score){
String sql="Select fun_for_sellbook('"+book_id+"','"+score+"')";
try{System.out.println(sql);
ResultSet r=state.executeQuery(sql);
if(r.next())
if(r.getInt(1)==1)
return true;
}catch(Exception e){
return false;
}
return false;
}
/*
* 根据传入的用户账号和用户密码,查找数据库,看该用户是否存在,密码是否正确
* user保存该用户的信息
* 成功执行返回true,执行失败返回false;
*/
public boolean UserLogin(String name,String passwords,User user){
try{
String sql="select * from user where user_id= '"+name+"' and passwords= '"+passwords+"'";
ResultSet r=state.executeQuery(sql);
if(r.next()){
user.setCollege(r.getString(3));
user.setHobby(r.getString(8));
user.setMajor(r.getString(4));
user.setPasswords(r.getString(2));
user.setPhone(r.getString(6));
user.setScore(r.getInt(9));
user.setUser_id(r.getString(1));
user.setUser_name(r.getString(7));
user.setSold_number(r.getInt(5));
user.setDormitory(r.getString(10));
return true;
}
else{
return false;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
}
/*
* 根据传入的用户的账号,查找他所关注的书籍
* 并以字符串的形式返回其所关注的书籍,若没有关注则返回null
*/
public String GetAttentionBooks(String user_id){
String sql="select book_name from book where book_id in(" +
"select book_id from attention where user_id='"+user_id+"')";
String temp="";
try{
ResultSet r=state.executeQuery(sql);
while(r.next()){
temp+=r.getString(1)+"\n";
}
}catch(Exception e){
e.printStackTrace();
return null;
}
return temp;
}
/*
* 根据传入的用户的账号,返回该用户的信息
*/
public User getUser(String user_id){
User user=new User();
try{
String sql="select * from user where user_id= '"+user_id+"'";
ResultSet r=state.executeQuery(sql);
if(r.next()){
user.setCollege(r.getString(3));
user.setHobby(r.getString(8));
user.setMajor(r.getString(4));
user.setPasswords(r.getString(2));
user.setPhone(r.getString(6));
user.setScore(r.getInt(9));
user.setUser_id(r.getString(1));
user.setUser_name(r.getString(7));
user.setSold_number(r.getInt(5));
user.setDormitory(r.getString(10));
return user;
}
else{
return null;
}
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public ArrayList<Book> GetArrayBooks(){
return books;
}
/*
* 用户注册,完成对user表的插入操作,即将新注册的
*合法用户添加到表中
*成功返回true,失败返回false
*/
public boolean UserRegister(User user){
try{
String sql="insert into user(user_id,passwords,college,major,phone,user_name,hobby,dormitory,grade) " +
"values('"+user.getUser_id()+"','"+user.getPasswords()+"','"+user.getCollege()+"','"+user.getMajor()+"','"+
user.getPhone()+"','"+user.getUser_name()+"','"+user.getHobby()+"','"+user.getDormitory()+"','"+user.getGrade()+"')";
System.out.println(state.execute(sql));
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
/*
* 修改用户信息,成功返回true,失败返回false
*/
public boolean ChangeMessage(User user){
try{
String sql="delete from user where user_id= '"+user.getUser_id()+"'";
state.execute(sql);
if(UserRegister(user)){
return true;
}else{
return false;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
}
/**
* huode xinxi fanhui jieguo
* @return
*/
public ArrayList<Class> GetArrayClass(){
try{
String sql="select * from class";
ResultSet r=state.executeQuery(sql);
ArrayList<Class> c=new ArrayList<Class>();
c.clear();
while(r.next()){
c.add(new Class(r.getInt(1), r.getString(2), r.getInt(3)));
}
return c;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 获得一个时间,作为新添加书籍的id
* 因为时间不唯一,以此保证书籍id的唯一性
*/
private String GetDateTime(){
try{
String sql="select now()";
ResultSet r=state.executeQuery(sql);
if(r.next())
return r.getString(1);
}catch(Exception e){
e.printStackTrace();
return null;
}
return null;
}
/*
* 执行和取消关注的操作,b为true表示要关注,b为false表示取消关注
* 然后根据user_id和book_id在attention执行插入或者删除操作
* 成功返回true,失败返回false
*/
public boolean PayAttention(boolean b,String user_id,String book_id){
String sql="";
if(b)
sql="insert into attention values('"+book_id+"','"+user_id+"')";
else
sql="delete from attention where user_id='"+user_id+"' and book_id='"+book_id+"'";
return Update(sql);
}
/*
* 执行上传书籍操作,根据传入的书籍信息在book表中将该书籍插入
* 成功插入返回true,执行失败返回false
*/
public boolean UpLoadBook(Book book){
try{
String temp=GetDateTime();
String str="";
for(int i=0;i<temp.length();i++)
if(Character.isDigit(temp.charAt(i)))
str+=temp.charAt(i);
book.setBook_id(str);
System.out.println(book);
String sql="insert into book(book_id,user_id,author," +
"publisher,price,remain_number,`key`,`language`," +
"book_name,class_id,publish_date,discount) values('" +
book.getBook_id()+"','"+book.getUser_id()+"','"+book.getAuthor()+"','"+
book.getPublisher()+"','"+book.getPrice()+"','"+book.getRemain_number()+"','"+
book.getKey()+"','"+book.getLanguage()+"','"+book.getBook_name()+"','"+
book.getClass_id()+"','"+book.getPublish_date()+"','"+book.getDiscount()+"')";
state.execute(sql);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
/*
* 获得该书籍的受关注情况
* 返回值int表示有多少人关注此书
*/
public int CountAttentionNumber(String book_id){
int n=0;
try{
String sql="select count_attention('"+book_id+"')";
ResultSet r=state.executeQuery(sql);
if(r.next())
n=r.getInt(1);
}catch(Exception e){
e.printStackTrace();
}
return n;
}
/*
* 根据传入的class_id获得该编号对应的书籍类的名字
*/
public String GetClassName(int class_id){
String sql="select class_name from class where class_id='"+class_id+"'";
try{
ResultSet r=state.executeQuery(sql);
if(r.next())
return r.getString(1);
}catch(Exception e){
e.printStackTrace();
return null;
}
return null;
}
public void getBookByKey(String key){
String sql="select * from book where book_name like '%"+key+"%'";
try{
result=state.executeQuery(sql);
String[][] t=ResultToarray();
for(int i=0;i<t.length;i++){
for(int j=0;j<t[0].length;j++)
System.out.print(t[i][j]+" ");
System.out.println();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] Args) throws SQLException{
MyDatabase db=new MyDatabase();
String[] str={"Book","book_id","book_name"};
int n=db.CountAttentionNumber("b2");
System.out.println(db.GetAttentionBooks("13055111"));
db.getBookByKey("英语");
db.closeDatabase();
}
}