java dbutil_Java:IO流,增删改查,配置文件,预处理后的DBUtils,含个人详细总结【诗书画唱】...
创建数据库表stu,结构uid,uname,upwd,umoney,使用预处理和配置文件制作增删改查程序
create table stu(
uid int primary key identity(1, 1),
uname nvarchar (20) ,
upwd nvarchar (20),
umoney int
)
insert into stu values('诗书','0',233)
insert into stu values('江唯','1',666)
insert into stu values('嘉怡','2',777)
insert into stu values('画唱','3',888)
insert into stu values('点赞','4',999)
--select * from stu
--delete from stu
--drop table stu
package liZi;
import java.io.*;
import java.util.*;
import java.sql.*;
public class peiZhi {
public static void main(String[] args)
throws Exception{
System.out.println("查表的所有信息:\n");
//selectSql:查询的SQL语句
String selectAllSql="select * from stu";
ResultSet resNeiRong1=DBUtils.Select(selectAllSql);
selectTableAll(resNeiRong1);
System.out.println("——————————");
System.out.println("修改表的信息后查表的所有信息:\n");
String updateSql
="update stu set uname=? where uid=?";
Object[] o={"诗书画唱",1};
//Object[] o={第一个"?",第二个"?",...第n个"?"};
DBUtils.ZSG(updateSql, o);
//______________________________
ResultSet resNeiRong2=DBUtils.Select(selectAllSql);
selectTableAll(resNeiRong2);
System.out.println("——————————");
System.out.println("删除表的信息后查表的所有信息:\n");
String deleteSql
="delete from stu where uid=?";
Object[] oo={2};
DBUtils.ZSG(deleteSql,oo);
//______________________________
ResultSet resNeiRong3=DBUtils.Select(selectAllSql);
selectTableAll(resNeiRong3);
System.out.println("——————————");
System.out.println("增加表的信息后查表的所有信息:\n");
String insertSql
="insert into stu values(?,?,?)";
Object[] ooo={"点赞投币收藏和关注",4,666};
DBUtils.ZSG(insertSql, ooo);
//______________________________
ResultSet resNeiRong4=DBUtils.Select(selectAllSql);
selectTableAll(resNeiRong4);
System.out.println("——————————");
}
//当有一段代码会常用,那么就会用
//鼠标右键等的快捷键封装生成的自定义方法。
//自己总结的自定义方法模板:private static void
//方法名(被传值的类型 被传值名){内容}
//resNeiRong可获得resNeiRong1或resNeiRong2等的内容
//下面是用快捷键封装生成的自定义方法,
//selectTableAll:查询表的所有信息。
private static void selectTableAll(ResultSet resNeiRong)
throws SQLException {
while(resNeiRong.next()){
System.out.println("用户编号:"
+resNeiRong.getObject(1)
+"\t用户名:"
+resNeiRong.getObject(2));
}
}
}
package liZi;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DBUtils {
public static Connection con=null;
public static ResultSet res=null;
public static PreparedStatement ps=null;
public static String uname,pwd,root,url;
static{//static为每个类中最先执行的地方,因为要让这部分先执行,所以这部分外面套个static,顺序不对,就会有问题
try {
//将创建的配置文件转化为字节流信息(类加载器读):
InputStream is= DBUtils.class.getResourceAsStream("./database.properties");
Properties p=new Properties();
//字节流转为内容
p.load(is);
root=p.getProperty("root");
url=p.getProperty("url");
uname=p.getProperty("uname");
pwd=p.getProperty("pwd");
//加载驱动
Class.forName(root);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getCon(){
if(con==null){
try {
con=DriverManager.getConnection(url,uname,pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return con;
}
public static ResultSet Select(String sql,Object... o){
con=getCon();
try {
ps=con.prepareStatement(sql);
for(int i=0;i
ps.setObject(i+1,o[i]);
}
res=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
public static boolean ZSG(String sql,Object... o){
//自己的总结:
//public static 方法的数据类型 方法名(XXX(被传值的数据类型)... 被传值名){}:表示声明了一个公共,静态,有任意数量的被传值的数据类型为XXX的被传值的方法
con=getCon();
boolean b=false;
try {
ps=con.prepareStatement(sql);
for(int i=0;i
ps.setObject(i+1,o[i]);
}
int num=ps.executeUpdate();
if(num>0){
b=true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}
}
url=jdbc:sqlserver://localhost;databaseName=yonghu
uname=qqq
pwd=123
root=com.microsoft.sqlserver.jdbc.SQLServerDriver
DBUtils中nain主函数中使用方法:
package Text;
import java.io.*;
import java.util.*;
import java.sql.*;
public class DBUtils {
//必须先把sqljdbc包导入,不然会报错
//下面的main主函数可以在这个DBUtils中直接调用
//DBUtilsprepareStatement
//这个用了预处理的类,类里面有增删改或查的方法
//用“.”来调用,自己的总结
//:(类名).(这个类中有的方法名)
//这个类可以分开写到单独的文件,也可以
//写在有main主函数调用的.java文件
public static void main(String[] args)
throws Exception{
String printlnAllSql="select * from stu";
String updateSql
="update stu set uname=? where uid=?";
Object[] duiXiang={"诗书画唱",1};
//想对某个对象进行操作的自己的总结:
//声明一个Object[] 对象名={?的值,?的第某个位置数值};
//之后用下面声明的增删改或查的方法,来执行下面的方法的内容
DBUtilsPrepareStatement.ZSGFangFa
(updateSql, duiXiang);
ResultSet res
=DBUtilsPrepareStatement
.selectFangFa(printlnAllSql);
System.out.println("打印所有stu表的内容:\n");
while(res.next()){
System.out.println(
"用户名:"+res.getObject(1)
+";用户编号:"+res.getObject(2));
}
//for(int i=0;i
//System.out.println(duiXiang[i]);
//}
}
//————————————————————————————————————————————————————
//public static void bianLiFangFa(Object... o){
//for(int i=0;i
//System.out.println(o[i]);
//}
//}
//————————————————————————————————
}
class DBUtilsPrepareStatement{
static String root,url,uname,pwd;
static Connection con=null;
static PreparedStatement ps=null;
static ResultSet res=null;
//常在静态代码块中读取配置文件
//static静态代码块就是优先执行的部分
static{
InputStream is=
DBUtilsPrepareStatement
.class.getResourceAsStream("./db.properties");
Properties p=new Properties();
try {
p.load(is);
root=p.getProperty("root");
url=p.getProperty("url");
uname=p.getProperty("uname");
pwd=p.getProperty("pwd");
//用Class.forName加载驱动,
//root为驱动的根(root)目录com.microsoft.sqlserver.jdbc.SQLServerDriver
Class.forName(root);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//个人理解:下面是加载数据库链接的方法 ,lianJieUrlUnamePwd
//连接url,uname,pwd
//就是用.getConnection
//把这里root对应的
//com.microsoft.sqlserver.jdbc.SQLServerDriver
//
//字符串,DriverManager和url,uname,pwd对应的字符串拼接或联系起来等
public static Connection lianJieUrlUnamePwd(){
if(con==null){
try {
con=DriverManager.getConnection(url,uname,pwd);
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
//声明用上prepareStatement预处理的封装的查询方法
public static ResultSet
selectFangFa(String sql,Object... o)
{
con=lianJieUrlUnamePwd();//拿到数据库链接
try {
ps=con.prepareStatement(sql);
for(int i=0;i
ps.setObject(i+1, o[i]);
}
//得到结果集
res=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
//封装增删改查的方法
public static boolean
ZSGFangFa(String sql,Object... o){
con=lianJieUrlUnamePwd();
boolean b=false;
try {
ps=con.prepareStatement(sql);
for(int i=0;i
ps.setObject(i+1, o[i]);
}
if(ps.executeUpdate()>0){
b=true;
}
//executeQuery():查询的时候用 ResultSet
//executeUpdate():增删改的时候用 int >0成功
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}
}
root=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost;databaseName=yonghu
uname=qqq
pwd=123
I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。
package peiZhi;
import java.io.*;
import java.util.*;
public class pz {
public static void main(String[] args)throws Exception{
// input英[ˈɪnpʊt]
// 美[ˈɪnpʊt]
// v.输入(信息);
// stream英[striːm]
// 美[striːm]
// n.流; (液) 流; (气) 流; (人) 流; (车) 流;
// InputStream:输入流
// resource英[rɪˈsɔːs]
// 美[ˈriːsɔːrs]
// n.资源
// getResourceAsStream:得到资源作为(As)流
// 在Java中,能够读取一个字节序列的对象就称作一个输入流。
// ————————————————
// 下面的neiRong就是被声明成输入流。
// 输入流是一种输入的格式,
// 所谓的“流”,意味着是顺序访问形式
// (也就是相对于随机访问形式来说的)。
// 打开一个文件的时候,文件指针会按顺序读取里面的内容
// ,就好像水顺次从水管中流出一样,
// 而这一个模型我们把它抽象为“输入流”。
InputStream neiRong=pz.class.
getResourceAsStream("./pz.properties");
// properties英[ˈprɒpətiz]
// 美[ˈprɑpərtiz]
// n.所有物; 特性;
// Properties类表示一个持久的属性集,
// Properties可以保存在流中或从流中加载,
// 属性列表中每一个键及其对应值都是一个字符串。
// Properties集合是一个唯一和IO流相结合的集合
//
// 1.可以使用Properties集合中的方法store,
// 把集合中的临时数据,持久化写入到硬盘中存储
//
// 2.可以使用Properties集合中的load,
// 把硬盘中保存的文件(键值对),读取到集合中使用
//
// 属性列表中每一个键及其对应值都是一个字符串。
//
// Properties集合是一个双列集合,key和value默认都是字符串
//property英[ˈprɒpəti]
//美[ˈprɑːpərti]
//n. 财产;
//创建Properties集合对象,
// 使用Properties集合存储数据,
// 遍历取出Properties集合中的数据:
Properties jiHe=new Properties();
try{
// load英[ləʊd]
// 美[loʊd]
//
// v.【(把大量…) 装上,装入;
// 承载; 】装载; 【大量给予(尤指得携带的东西);】
//
jiHe.load(neiRong);
// 把nerong装载到jiHe里,之后可以直接打印出来
System.out.println("打印所有内容:"+jiHe);
// 使用getProperty方法通过key获取value
System.out.println("打印name对应的值:"
+jiHe.getProperty("name"));
// "name"为Properties文件中的key键,
// name=XXX中的XXX为对应的value值
}catch(IOException e){
e.printStackTrace();
}
}
}
java dbutil_Java:IO流,增删改查,配置文件,预处理后的DBUtils,含个人详细总结【诗书画唱】...相关推荐
- JDBC:JAVA连接Mysql实现增删改查
总有特别赶的时候,小高叫你如何速通JAVA连接数据库Mysql实现增删改查.CV战士 一.前置准备工作 1. 安装IDEA,配置JAVA环境 2. 安装Mysql,配置Mysql环境变量 3. 安装S ...
- Java连接Mysql数据库增删改查实现
Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...
- Java 实现Gbase数据库增删改查功能
Java 实现Gbase数据库增删改查功能 具体代码如下 主要: 要记得在官网下载驱动包gbase-connector-java-8.3-bin.jar package com.advance.JDB ...
- java实现对HDFS增删改查(CRUD)等操作
实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...
- java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能
基于ssm框架组合的增删改查功能 ssm框架组合之前已经搭建完成了,下面基于该框架组合实现增删改查的功能,首先创建一个数据库和一张表: CREATE DATABASE `ssmteam` /*!401 ...
- JAVA swing实现简单增删改查
前言 欢迎大家来到我的博客,请各位看客们点赞.收藏.关注三连! 欢迎大家关注我的知识库,Java之从零开始 · 语雀 你的关注就是我前进的动力! CSDN专注于问题解决的博客记录,语雀专注于知识的收集 ...
- java之简单的增删改查功能
目录 前言 一.查询 二.增加 三.删除 四.修改 五.界面展示: 前言 用增删改查写的简单版学生管理系统 运用了JavaScript,El表达式,c标签,mvc模式,三层架构,MySQL. 数据库辅 ...
- java连接mysql以及增删改查操作
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) 1 class DBConnect ...
- java 学生信息的增删改查_学生信息的增删改查(java)
学生信息的增删改查 注意:此处用到的是access数据库. 运行后效果如图: 代码如下: package example; import java.awt.*; import java.awt.eve ...
- MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
上节已经学会对MySQL进行简单的增删改查了,那么,我们如何实现用Java来对数据库操作增删改呢. 本节将用Java演示对MySQL进行增删改查. 简单的来说,分为4个步骤: 1.加载连接器(驱动) ...
最新文章
- ajax content download,关于ajax的content-download时间过慢问题的解决方案与思考
- 通过源码分析Android 的消息处理机制
- 【工具】音乐播放相关工具,音乐文件格式转换工具,MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具...
- 实战SSM_O2O商铺_12【商铺注册】View层之前台页面
- JavaScript实现knuth-morris-pratt(KMP)算法(附完整源码)
- cpri带宽不足的解决方法_白皮书:FPGA赋能下一代通信和网络解决方案(第四部分)...
- 关于Android错误 View requires API level 14 (current...
- PAT之气死人不偿命的3n+1猜想
- OSPF不规则区域,远离Area 0的区域连通性解决方案
- ELK收集tomcat访问日志并存取mysql数据库案例
- 工业软件下载大全202108
- 怎样用计算机做ppt,电脑怎么制作ppt步骤
- 算法与程序的区别与联系
- APP在推广之渠道为王(一 )
- clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
- 深圳大学丽湖校区iPad连校园网WiFi
- springboot 问题记录
- C/C++动态申请空间
- 系统服务管理者:ServiceManager进程
- 取近似值 java
热门文章
- DOM 元素对象解析
- Vue 全站缓存之 vue-router-then :前后页数据传递
- 算法(四)、时间复杂度、排序、查找
- C#获取 Flv视频文件播放时间长度等信息
- Redhat 5.4 Oracle 10g RAC 删除节点
- 华为总是在用自己独特的方式诠释成功
- 微信小程序自定义组件(Toast)
- Java对象映射XML文件
- Python模块的使用
- error: could not lock config file .git/config: Permission denied/Command failed with exit 255