首页编程java编程java+sql java连接mysql数据库

java+sql java连接mysql数据库

编程之家2026-05-21718次浏览

各位老铁们,大家好,今天由我来为大家分享java+sql,以及java连接mysql数据库的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

java+sql java连接mysql数据库

java如何实现sql连接和查询的代码

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.naming.Context;

java+sql java连接mysql数据库

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

public class DBCon{

//数据库驱动对象

public static final String DRIVER="oracle.jdbc.driver.OracleDriver";

java+sql java连接mysql数据库

//数据库连接地址(数据库名)

public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";

//登陆名

public static final String USER="FM";

//登陆密码

public static final String PWD="FM";

//创建数据库连接对象

private Connection con=null;

//创建数据库预编译对象

private PreparedStatement ps=null;

//创建结果集

private ResultSet rs=null;

//创建数据源对象

public static DataSource source=null;

////静态代码块

// static{

//

////初始化配置文件context

// try{

// Context context=new InitialContext();

// source=(DataSource)context.lookup("java:comp/env/jdbc/webmessage");

//} catch(Exception e){

//// TODO Auto-generated catch block

// e.printStackTrace();

//}

//

//

//}

/**

*获取数据库连接

*/

public Connection getCon(){

try{

Class.forName(DRIVER);

} catch(ClassNotFoundException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

try{

con=DriverManager.getConnection(URL,USER,PWD);

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

return con;

}

///**

//*获取数据库连接

//*/

// public Connection getCon(){

//

// try{

// con=source.getConnection();

//} catch(SQLException e){

//// TODO Auto-generated catch block

// e.printStackTrace();

//}

//

// return con;

//}

/**

*关闭所有资源

*/

public void closeAll(){

if(rs!=null)

try{

rs.close();

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

if(ps!=null)

try{

ps.close();

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

if(con!=null)

try{

con.close();

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

*@param sql数据库更新(增、删、改)语句

*@param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)

*@return返回受影响都行数

*/

public int update(String sql,String... pras){

int resu=0;

con=getCon();

try{

ps=con.prepareStatement(sql);

for(int i=0;i<pras.length;i++){

ps.setString(i+1,pras[i]);

}

resu=ps.executeUpdate();

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

closeAll();

}

return resu;

}

/**

*@param sql数据库查询语句

*@param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)

*@return返回结果集

*/

public ResultSet query(String sql,String... pras){

con=getCon();

try{

ps=con.prepareStatement(sql);

if(pras!=null)

for(int i=0;i<pras.length;i++){

ps.setString(i+1, pras[i]);

}

rs=ps.executeQuery();

} catch(SQLException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

return rs;

}

}

java 怎么连接sql数据库 帮忙步骤讲解以及代码参考

首先,使用JDBC技术获取数据库连接:

public static Connection getConnection(){

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","root","root");

return con;

}catch(Exception e){

e.printStackTrace();

return null;

}

}

Class.forName(数据库驱动);

这是JVM在加载数据库驱动。

DriverManager.getConnection(url,username,password);

url是指连接数据库的地址。

像上面我写的URL是这样的:jdbc:oracle:thin:@127.0.0.1:1521:orcl

127.0.0.1是指本机,也可以用localhost代替,1521是数据库端口号(本人用的是oracle10g),orcl是指oracle_sid。username/password数据库的用户名和密码。有的数据库的url可能不是这样。当然可以去网上查一下就知道了。

这种连接方法是一次请求一次连接,是比较浪费资源的。

像tomcat,weblogic等服务器都带有连接池来避免资源的浪费,而且现在好象有规定,只要是服务器就必须带有连接池。

至于连接池的连接方法,不同的服务器有不同的获得方法。建议你用哪个就去学哪个。

有连接就有关闭数据库,获得数据库连接后一定要记得关闭资源。

public static void close(Connection con){

if(con!=null){

try{con.close();}catch(Exception e){}

}

}

为了方便,不防写成一个方法。

获取连接后,然后使用这个连接去创建相应的Statement来操作数据库。

有Statement,PerparedStatement,CallableStatement这几种statement可以用来创建。

我们先看看Statement的使用。

public static void main(String[] args){

Connection con=JDBCUtil.getConnection();

Statement stat=null;

ResultSet rs=null;

try{

String sql="select a_id,a_name,a_no from a";

stat=con.createStatement();

rs=stat.executeQuery(sql);

while(rs.next()){

System.err.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getInt(3));

}

}catch(Exception e){

e.printStackTrace();

}

JDBCUtil.close(rs,stat,con);

}

注释:

stat=con.createStatement();是用连接创建Statement对象。

stat.executeQuery(sql);是执行查询语句。这个方法返回的是一个结果集。即ResultSet。可以将查询出来的结果放入结果集中。

rs.next()这个方法返回的一个boolean类型的值,即当指针能够往下走时,返回true,否则返回false。这样就可以保证能够遍历这个结果集了。

当然这里出现了Statement,ResultSet,那么close()方法也得变化了。

如下:

public static void close(ResultSet rs,Statement stat,Connection con){

if(rs!=null){

try{rs.close();}catch(Exception e){}

}

if(stat!=null){

try{stat.close();}catch(Exception e){}

}

if(con!=null){

try{con.close();}catch(Exception e){}

}

}

注意关闭顺序,一定是先ResultSet,后Statement,最后Connection.

由于PerparedStatement和CallableStatement都是Statement的实现类,根据JAVA多态的用法,close()方法就算完全写完了,不用改了。

现在来看看结果:

2/all/2

1/hello/1

===================================================================

现在我们用PerparedStatement来查询:

Connection con=JDBCUtil.getConnection();

PreparedStatement stat=null;

ResultSet rs=null;

try{

String sql="select a_id,a_name,a_no from a where a_id=?";

stat=con.prepareStatement(sql);

stat.setInt(1, 1);

rs=stat.executeQuery();

while(rs.next()){

System.err.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getInt(3));

}

}catch(Exception e){

e.printStackTrace();

}

JDBCUtil.close(rs,stat,con);

这里的sql语句里有一个值是未确定的。这样就可以实现预编译,大大提高了程序的运行效率。流程如下:

stat=con.prepareStatement(sql);这个方法就将这个sql语句进行了一次编译,查看有没有什么明显的语法错误等。

如果没错,再通过stat.setInt(1, 1);将缺失的值补回去然后再执行sql查询。

PreparedStatement为批处理提供了一系统方法,让批查询、批更新等更加的效率。

让我们看看结果:

1/hello/1

==============================================================

CallableStatement是专门用于处理存储过程的。

如果想深入的学习,建议你去查看相关资料。

java防止SQL注入的几个途径

java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数

01importjava.io.IOException;

02importjava.util.Iterator;

03importjavax.servlet.Filter;

04importjavax.servlet.FilterChain;

05importjavax.servlet.FilterConfig;

06importjavax.servlet.ServletException;

07importjavax.servlet.ServletRequest;

08importjavax.servlet.ServletResponse;

09importjavax.servlet.http.HttpServletRequest;

10importjavax.servlet.http.HttpServletResponse;

11/**

12*通过Filter过滤器来防SQL注入攻击

13*

14*/

15publicclassSQLFilterimplementsFilter{

16privateStringinj_str="'|and|exec|insert|select|delete|update|count|*|%

|chr|mid|master|truncate|char|declare|;|or|-|+|,";

17protectedFilterConfigfilterConfig=null;

18/**

19*Shouldacharacterencodingspecifiedbytheclientbeignored?

20*/

21protectedbooleanignore=true;

22publicvoidinit(FilterConfigconfig)throwsServletException{

23this.filterConfig=config;

24this.inj_str=filterConfig.getInitParameter("keywords");

25}

26publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,

27FilterChainchain)throwsIOException,ServletException{

28HttpServletRequestreq=(HttpServletRequest)request;

29HttpServletResponseres=(HttpServletResponse)response;

30Iteratorvalues=req.getParameterMap().values().iterator();//获取所有的表单参数

31while(values.hasNext()){

32String[]value=(String[])values.next();

33for(inti=0;i<value.length;i++){

34if(sql_inj(value[i])){

35//TODO这里发现sql注入代码的业务逻辑代码

36return;

37}

38}

39}

40chain.doFilter(request,response);

41}

42publicbooleansql_inj(Stringstr)

43{

44String[]inj_stra=inj_str.split("\\|");

45for(inti=0;i<inj_stra.length;i++)

46{

47if(str.indexOf(""+inj_stra[i]+"")>=0)

48{

49returntrue;

50}

51}

52returnfalse;

53}

54}

也可以单独在需要防范SQL注入的JavaBean的字段上过滤:

1/**

2*防止sql注入

3*

4*@paramsql

5*@return

6*/

7publicstaticStringTransactSQLInjection(Stringsql){

8returnsql.replaceAll(".*([';]+|(--)+).*","");

9}

关于java+sql到此分享完毕,希望能帮助到您。

html5企业网站源码 html网页制作源码免费旅游网站源码 网站源码