java数据库连接中如何用链表接收数据_java通过JDBC连接数据库及增删改查操作

本文介绍了如何使用Java JDBC连接MySQL数据库,并进行增删改查操作。首先创建了newsmanager数据库和news、newstype两个表,接着讲解了JDBC的基本概念和优点,包括其作为SQL语言的Java API,统一访问不同数据库的能力。接着展示了如何创建连接数据库的工具类,以及如何编写News和Newstype实体类。最后,详细说明了查询、添加、删除和修改数据库记录的实现步骤,并提供了一个整合所有操作的TestMain类。
摘要由CSDN通过智能技术生成

1.实战数据库数据的准备

创建数据库(newsmanager),然后创建表news(id,title,content,type)和newstype(id,name),其中news的type和newstype的id为主外键关系,如下图

4bf60d0769b16c36b016b07c0b4a76ae.png

2.JDBC的介绍

1)一种执行SQL语言的Java API

2)可以对所以主流数据库进行统一访问(access,MySQL,sql server,Oracle)

3)极大地减少了程序操作数据库的复杂性

4)jdbc使用面向对象的方式操作数据,能更好的和Java语言衔接

5)jdbc可以直接调用数据库存储过程

6)jdbc操作数据库的效率很高

7)学会了jdbc,什么数据库存取数据都会了

8)但是唯一的缺点就是不安全,因为你会把数据库的用户名和密码写入代码里,别人可以反编译便可以获取你的数据库信息,所以看你怎么衡量吧

3.连接数据库工具类的实现

1)在IDE(MyEclipse/eclipse)中建立项目

创建包com jdbc.bean(实体类包),com jdbc.dao(操作数据库的方法),com jdbc.main(实际操作方法),com jdbc.util(工具类包)

2)导入MySQL连接jar包到项目中(jar包下载地址:http://dev.mysql.com/downloads/file/?id=462850)

3)利用导入的jar包完成连接数据库的工具类

完成上述步骤的图

37d2ad9be5288b4d4f1e2e2adc4d3f07.png

4)connection对象的讲解和使用

在com jdbc.util包下,创建一个类BaseConnection,它的作用是连接数据库 ,写上以下代码

package com.jdbc.util;

import java.sql.Connection;

import java.sql.DriverManager;

public class BaseConnection {

public static Connection getConnection(){//用这个方法获取mysql的连接

Connection conn=null;

try{

Class.forName("com.mysql.jdbc.Driver");//加载驱动类

conn=DriverManager.

getConnection("jdbc:mysql://localhost:3306/newsmanager","root","950107");//(url数据库的IP地址,user数据库用户名,password数据库密码)

}catch(Exception e){

e.printStackTrace();

}

return conn;

}

public static void main(String[] args){//测试数据库是否连接成功的方法

Connection conn=BaseConnection.getConnection();

System.out.println(conn);

}

}

若连接成功则显示下图

90bf632d1c8234c941509d987f2a39ab.png

3.查询操作的机制和实现

1)在com jdbc.bean包下根据数据库的数据属性创建News.java和Newstype.java,代码分别如下

News.java代码

package com.jdbc.bean;

public class News {

private int id;

private String title;

private String content;

private int type;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

}

Newstype.java代码

package com.jdbc.bean;

public class NewsType {

private int id;

private String name;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

2)在com jdbc.dao(操作数据库的方法)下分别创建NewsDAO.java(操作news表的操作)和NewsType.java(操作newstype表的操作),代码如下

NewsDAO.java

package com.jdbc.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import com.jdbc.bean.News;

import com.jdbc.util.BaseConnection;

public class NewsDAO {

public ArrayList getList(){//单表查询

ArrayList ar=new ArrayList();//存储从数据库中取出来的数据

Connection conn=BaseConnection.getConnection();//获取数据库连接

//sql执行器对象

PreparedStatement ps=null;

//结果集对象

ResultSet rs=null;//查询出来的数据先放到rs中

try{

String sql="select * from news";

ps=conn.prepareStatement(sql);

rs=ps.executeQuery();//执行数据库查询的方法,放到rs中

while(rs.next()){//rs对象相当于一个指针,指向数据库的一横行数据

News ne =new News();//封装数据

ne.setId(rs.getInt("id"));//rs指针指向id一行获取id一行数据,存储到ne中

ne.setTitle(rs.getString("title"));//rs指针指向title一行获取id一行数据,存储到ne中

ne.setContent(rs.getString("content"));//rs指针指向content一行获取id一行数据,存储到ne中

ne.setType(rs.getInt("type"));//rs指针指向id一行获取type一行数据,存储到ne中

ar.add(ne);//通过循环,把数据的数据依次存储在ne对象中,再把ne对象添加到ar数组中方便提取

}

}catch(Exception e){

e.printStackTrace();

}finally{//重点下面代码必须写,当数据库使用后必须关闭,如果没有关闭数据库的接口有限,下次就不能连接

try{

if(rs!=null){

rs.close();

}if(ps!=null){

ps.close();

}if(conn!=null){

conn.close();

}

}catch(Exception e2){

e2.printStackTrace();

}

}

return ar;//返回ar

}

public static void main(String[] args){

ArrayList ar= new NewsDAO().getList();

for(News ne:ar){

System.out.println(ne.getId()+" "+ne.getTitle());

}

}

}

如果要链表查询只需把NewsDAO.java中String sql="  select  *  from news, newstype"   "where news.type =newsype.id"和ne.setName(rs.getString(”name”))再把News.java添加private String name;

出现如下图就表示成功

3e2227c80a7416cb05f887a3ec627a76.png

4.添加操作的机制与实现

只需在NewsDao.java添加方法,代码如下

//该方法负责将传递过来的news对象中的数据存入到数据库中

public void insert(News ne){

Connection conn=BaseConnection .getConnection();

PreparedStatement ps=null;

String sql="insert into news(title,content,type)"+

"values(' "+ne.getTitle()+"','"+ne.getContent()+"',"+

ne.getType()+")";

try{

ps= conn.prepareStatement(sql);//把写好的sql语句传递到数据库,让数据库知道我们要干什么

int a=ps.executeUpdate();//这个方法用于改变数据库数据,a代表改变数据库的条数

if(a>0){

System.out.println("添加成功");

}else{

System.out.println("添加失败");

}

}catch(Exception e){

e.printStackTrace();

}try{

if(ps!=null){

ps.close();

}if(conn!=null){

conn.close();

}

}catch(Exception e2){

e2.printStackTrace();

}

}

再把public static void main(String[] args){

News ne=new News();

NewsDAO neda=new NewsDAO();

ne.setTitle("成都温江环境好");

ne.setContent("我还是得了肺癌");

ne.setType(2);

neda.insert(ne);

// ArrayList ar= new NewsDAO().getList();

// for(News ne:ar){

// System.out.println(ne.getId()+" "+ne.getTitle());

// }

}

}改了

出现如下图就成功了

8567fc3a7197108ddb10345121bc98db.png

数据库也更新了如图

f37b03bf03b9774c3521cf1464b46339.png

上述也可以使用占位符,代码如图

68b5b541e4725e01fd17fdfa13e62d2b.png

5.删除和修改操作的机制和实现

1)在NewsDAO.java文件下添加deleta方法,代码如下

public void delete(int id){//删除数据库中的数据

Connection conn=BaseConnection.getConnection();

PreparedStatement ps=null;

String sql="delete from news where id =?";

try{

ps=conn.prepareStatement(sql);

ps.setInt(1, id);

int a=ps.executeUpdate();

if(a>0){

System.out.println("删除成功");

}else{

System.out.println("删除失败");

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(ps!=null){

ps.close();

}if(conn!=null){

conn.close();

}

}catch(Exception e2){

e2.printStackTrace();

}

}

}

调用该方法就可以删除操作,成功如下图

cde01f63b4eb36de8fac9e0d438b739e.png

2)在NewsDAO.java文件下添加update方法,代码如下

//本方法用于将传递过来的news对象中的值,根据id主键,改变数据库中的值

public void update(News ne){

Connection conn=BaseConnection.getConnection();

PreparedStatement ps=null;

String sql="update news set title=?,content=?,type=?"+

"where id=?";

try{

ps=conn.prepareStatement(sql);

ps.setString(1,ne.getTitle());

ps.setString(2,ne.getContent());

ps.setInt(3,ne.getType());

ps.setInt(4,ne.getId());

int a=ps.executeUpdate();

if(a>0){

System.out.println("修改成功");

}else{

System.out.println("修改失败");

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(ps!=null){

ps.close();

}if(conn!=null){

conn.close();

}

}catch(Exception e2){

e2.printStackTrace();

}

}

}

6.把这些方法串起来

在com.jdbc.main包下创建TestMain.java,代码如下

package com.jdbc.main;

import java.util.ArrayList;

import java.util.Scanner;

import com.jdbc.bean.News;

import com.jdbc.dao.NewsDAO;

public class TestMain {

public static void main(String[] args){

Scanner sc=new Scanner(System.in);

NewsDAO nd=new NewsDAO();

while(true){

System.out.println("1.查看新闻 2.添加新闻 3.删除新闻 4.退出");

int a=sc.nextInt();

if(a==1){

ArrayList ar =nd.getListAll();

System.out.println("编号\t标题\t内容");

for(News ne:ar){

System.out.println(ne.getId()+"\t"+ne.getTitle()+"\t"+ne.getContent());

}

}else if(a==2){

System.out.println("请输入新闻标题内容类别编号");

News ne=new News();

ne.setTitle(sc.next());

ne.setContent(sc.next());

ne.setType(sc.nextInt());

boolean b=nd.insert1(ne);//调用插入方法

System.out.println(b);

}else if(a==3){

System.out.println("请输入要删除的新闻编号");

int id =sc.nextInt();

boolean b=nd.delete(id);//调用删除方法

System.out.println(b);

}else{

break;

}

}

}

}

实现成功会出现下图

8bc2046cbe1c05780fabcb08d63237fc.png

这就是JDBC连接任何数据库的方法,我会把代码传上来,不用积分就可以下载,希望大家多多支持我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值