本章大部分例子采用的模式是JSP+JavaBean模式,即JSP页面调用bean来完成对数据库的操作,使用的数据库管理系统是SQL Server 2000。
1. SQL Server 2000数据库管理系统
SQL Server 2000是一个网络数据库,可以使远程的计算机访问它所管理的数据库。安装好SQL Server 2000后,需启动SQL Server 2000提供的数据库服务器,以便使远程的计算机访问它所管理的数据库。
如果您已经安装SQL Server 2000,可以如下操作启动SQL Server 2000提供的数据库服务器:单击“开始”→“程序”→“Microsoft SQL Server” →“服务器管理器”。
2. JDBC
JDBC(Java DataBase Connectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API,它由一些Java类和接口组成。
JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库
使用JDBC进行如下操作:
与一个数据库建立连接。
向已连接的数据库发送SQL语句。
处理SQL语句返回的结果。
3. 数据库连接的常用方式
1.一种常见方式是建立起一个JDBC-ODBC桥接器:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
2.另一种使用纯Java数据库驱动程序
加载SQLServer驱动程序代码如下:
Class.forName("com.microsoft.sqlserver. jdbc .SQLServerDriver");
4.查询操作
与数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息,如查询、修改和更新数据库中的表等。
创建Statement对象
Statement sql=con.createStatement();
sql对象就可以调用相应的方法,实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中
ResultSet rs=sql.executeQuery("SELECT * FROM score");
5. 更新、添加与删除操作
Statement对象调用方法:
public int executeUpdate(String sqlStatement);
通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作.
6.分页显示记录
用户使用分页方式显示ResultSet对象中的数据,就必须始终保持和数据库的连接,直到用户将ResultSet对象中的数据查看完毕。我们知道,每种数据库在同一时刻都有允许的最大连接数目,因此当多个用户同时分页读取数据库表的记录时,应当避免长时间占用数据库的连接资源。
CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connnection 对象,这意味着一旦把ResultSet对象中的数据保存到CachedRowSetImpl对象中后,就可以关闭和数据库的连接。
假设CachedRowSetImpl对象中有m行记录,准备每页显示n行,那么,总页数的计算公式是:
如果m除以n的余数大于0,总页数等于m除以n的商加1;
如果m除以n的余数等于0,总页数等于m除以n的商。
即总页数=(m%n)==0?(m/n):(m/n+1);
如果准备显示第p页的内容,应当把CachedRowSetImpl对象中的游标移动到第(p-1)*n+1 行记录处。
7.常见数据库连接
(1)连接Oracle数据库
加载驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
建立连接
Connection conn=DriverManager.getConnection( "jdbc:oracle:thin:
@主机host:端口号:数据库名“, ”用户名“, ”密码“);
(2)连接MySql数据库
加载MySql驱动程序:
try{ Class.forName("com.mysql.jdbc.Driver")
}
catch(Exception e){ }
建立连接
try{ String uri= “jdbc:mysql://localhost/数据库名";
String user=“用户名";
String password=“密码";
con=DriverManager.getConnection(uri,user,password);
}
catch(SQLException e) { }
8.使用连接池
连接池的思想是:Tomcat服务器可以事先预备好若干个连接对象,将这些连接对象存放在一个称作连接池的容器中,通常由链表来担当这一角色。当某用户需要操作数据库时,只要从连接池中取出一个连接对象即可,当用户使用完该连接对象后,将该连接对象放回到连接池中。如果某用户需要操作数据库时,连接池中已没有连接对象可用,那么该用户就必须等待,直到连接池中有连接对象。
9.使用预处理语句
对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用
prepareStatement(String sql)
方法对参数sql指定的SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中.
例子1
showByJdbcOdbc.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<% Connection con;
Statement sql;
ResultSet rs;
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{ out.print(e);
}
try { con=DriverManager.getConnection("jdbc:odbc:mymoon","sa","sa");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM employee WHERE salary>3000");
out.print("
");
out.print("");
out.print(""+"雇员号");
out.print(" "+"姓名");
out.print(" "+"出生日期");
out.print(" "+"薪水");
out.print(" ");
while(rs.next())
{ out.print("");
out.print(""+rs.getString(1)+" ");
out.print(""+rs.getString(2)+" ");
out.print(""+rs.getDate("birthday")+" ");
out.print(""+rs.getFloat("salary")+" ");
out.print(" ") ;
}
out.print("
");
con.close();
}
catch(SQLException e)
{ out.print(e);
}
%>
例子2
showBySQLDriver.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<% Connection con;
Statement sql;
ResultSet rs;
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e)
{ out.print(e);
}
try { String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
String user="sa";
String password="sa";
con=DriverManager.getConnection(uri,user,password);
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM employee WHERE salary>3000");
out.print("
");
out.print("");
out.print(""+"雇员号");
out.print(" "+"姓名");
out.print(" "+"出生日期");
out.print(" "+"薪水");
out.print(" ");
while(rs.next())
{ out.print("");
out.print(""+rs.getString(1)+" ");
out.print(""+rs.getString(2)+" ");
out.print(""+rs.getDate("birthday")+" ");
out.print(""+rs.getFloat("salary")+" ");
out.print(" ") ;
}
out.print("
");
con.close();
}
catch(SQLException e)
{ out.print(e);
}
%>
例子3
QueryBean.java
package database.operation;
import java.sql.*;
public class QueryBean
{ String databaseName=""; //数据库名
String tableName=""; //表名
String user="" ; //用户
String secret="" ; //密码
StringBuffer queryResult; //查询结果
public QueryBean()
{ queryResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e) {}
}
public void setDatabaseName(String s)
{ databaseName=s.trim();
queryResult=new StringBuffer();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ tableName=s.trim();
queryResult=new StringBuffer();
}
public String getTableName()
{ return tableName;
}
public void setSecret(String s)
{ secret=s.trim();
queryResult=new StringBuffer();
}
public String getSecret()
{ return secret;
}
public void setUser(String s)
{ user=s.trim();
queryResult=new StringBuffer();
}
public String getUser()
{ return user;
}
public StringBuffer getQueryResult()
{ Connection con;
Statement sql;
ResultSet rs;
try { queryResult.append("
");
String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
String id=user;
String password=secret;
con=DriverManager.getConnection(uri,id,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int 字段个数=0;
queryResult.append("");
while(rs1.next())
{ 字段个数++;
String clumnName=rs1.getString(4);
queryResult.append(""+clumnName+" ");
}
queryResult.append(" ");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM "+tableName);
while(rs.next())
{ queryResult.append("");
for(int k=1;k<=字段个数;k++)
{ queryResult.append(""+rs.getString(k)+" ");
}
queryResult.append(" ");
}
queryResult.append("
");
con.close();
}
catch(SQLException e)
{ queryResult.append("请输入正确的用户名和密码");
}
return queryResult;
}
}
inquire.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.QueryBean" %>
在 表查询到记录:
例子4
RandomQueryBean.java
package database.operation;
import java.sql.*;
import java.util.*;
public class RandomQueryBean
{ String databaseName=""; //数据库名称
String tableName=""; //表的名字
int count; //记录总数
int randomNumber; //随机输出的记录数
StringBuffer randomQueryResult; //查询结果
Connection con;
Statement sql;
ResultSet rs;
public RandomQueryBean()
{ randomQueryResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){ }
}
public void setDatabaseName(String s)
{ databaseName=s.trim();
randomQueryResult=new StringBuffer();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ tableName=s.trim();
randomQueryResult=new StringBuffer();
}
public String getTableName()
{ return tableName;
}
public void setRandomNumber(int n)
{ randomNumber=n;
randomQueryResult=new StringBuffer();
}
public int getRandomNumber()
{ return randomNumber;
}
public int getCount()
{ try{ String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
con=DriverManager.getConnection(uri,"sa","sa");
sql= con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=sql.executeQuery("SELECT * FROM "+tableName);
rs.last();
count=rs.getRow();
con.close();
}
catch(SQLException exp)
{ count=-1;
}
return count;
}
public StringBuffer getRandomQueryResult()
{ randomQueryResult=new StringBuffer();
try { randomQueryResult.append("
");
String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
con=DriverManager.getConnection(uri,"sa","sa");
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int 字段个数=0;
randomQueryResult.append("");
while(rs1.next())
{ 字段个数++;
String clumnName=rs1.getString(4);
randomQueryResult.append(""+clumnName+" ");
}
randomQueryResult.append(" ");
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=sql.executeQuery("SELECT * FROM "+tableName);
rs.last();
count=rs.getRow();
Vector vector=new Vector();
for(int i=1;i<=count;i++)
{ vector.add(new Integer(i));
}
int 抽取数目=Math.min(randomNumber,count);
while(抽取数目>0)
{ int i=(int)(Math.random()*vector.size());
int index=(vector.elementAt(i)).intValue();//vector中随机抽取一个元素
rs.absolute(index); //游标移到这一行
randomQueryResult.append("");
for(int k=1;k<=字段个数;k++)
{ randomQueryResult.append(""+rs.getString(k)+" ");
}
randomQueryResult.append(" ");
抽取数目--;
vector.removeElementAt(i); //将抽取过的元素从vector中删除
}
randomQueryResult.append("
");
con.close();
}
catch(SQLException e){ }
randomNumber=0;
return randomQueryResult;
}
}
random.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.*" %>
随机查询数据库表中的记录:
在 表中共有
条记录.
随机输出 条记录:
例子5
ConditionQuery.java
package database.operation;
import java.sql.*;
public class ConditionQuery
{ String number ; //雇员号
float salaryMax,salaryMin; //薪水范围
StringBuffer queryResultByNumber,
queryResultBySalary;
public ConditionQuery()
{ queryResultByNumber=new StringBuffer();
queryResultBySalary=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){ }
}
public void setNumber(String s)
{ number=s.trim();
queryResultByNumber=new StringBuffer();
queryResultBySalary=new StringBuffer();
}
public String getNumber()
{ return number;
}
public void setSalaryMax(float n)
{ salaryMax=n;
queryResultByNumber=new StringBuffer();
queryResultBySalary=new StringBuffer();
}
public float getSalaryMax()
{ return salaryMax;
}
public void setSalaryMin(float n)
{ salaryMin=n;
queryResultByNumber=new StringBuffer();
queryResultBySalary=new StringBuffer();
}
public float getSalaryMin()
{ return salaryMin;
}
public StringBuffer getQueryResultByNumber()
{ String condition="SELECT * FROM employee Where number = '"+number+"'";
queryResultByNumber=f(condition);
return queryResultByNumber;
}
public StringBuffer getQueryResultBySalary()
{ String condition="SELECT * FROM employee Where salary <= "+salaryMax
+" AND "+"salary >= "+salaryMin;
queryResultBySalary=f(condition);
return queryResultBySalary;
}
private StringBuffer f(String condition)
{ StringBuffer str=new StringBuffer();
Connection con;
Statement sql;
ResultSet rs;
try { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
con=DriverManager.getConnection(uri,"sa","sa");
sql=con.createStatement();
rs=sql.executeQuery(condition);
str.append("
");
str.append(""+"number");
str.append(" "+"name");
str.append(" "+"birthday");
str.append(" "+"salary");
while(rs.next())
{ str.append(" ");
str.append(""+rs.getString(1)+" ");
str.append(""+rs.getString(2)+" ");
str.append(""+rs.getDate(3)+" ");
str.append(""+rs.getFloat(4)+" ");
str.append(" ");
}
str.append("");
con.close();
}
catch(SQLException e)
{ System.out.println(e);
}
return str;
}
}
condition.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.*" %>
根据雇员号 查询到的记录:
薪水在 至
之间的记录:
例子6
OrderQuery.java
package database.operation;
import java.sql.*;
public class OrderQuery
{ String orderType; //排序方式
StringBuffer orderResult; //排序结果
public OrderQuery()
{ orderResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){ }
}
public void setOrderType(String s)
{ orderType=s.trim();
try{ byte bb[]=orderType.getBytes("ISO-8859-1");
orderType=new String(bb,"gb2312");
}
catch(Exception e){}
}
public String getOrderType()
{ return orderType;
}
public StringBuffer getOrderResult()
{ String orderCondition="SELECT * FROM employee ORDER BY "+orderType;
Connection con;
Statement sql;
ResultSet rs;
try { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
con=DriverManager.getConnection(uri,"sa","sa");
sql=con.createStatement();
rs=sql.executeQuery(orderCondition);
orderResult.append("");
orderResult.append(""+"number");
orderResult.append(" "+"name");
orderResult.append(" "+"birthday");
orderResult.append(" "+"salary");
while(rs.next())
{ orderResult.append(" ");
orderResult.append(""+rs.getString(1)+" ");
orderResult.append(""+rs.getString(2)+" ");
orderResult.append(""+rs.getDate(3)+" ");
orderResult.append(""+rs.getFloat(4)+" ");
orderResult.append(" ");
}
orderResult.append("");
con.close();
}
catch(SQLException e)
{ System.out.println(e);
}
return orderResult;
}
}
sort.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.*" %>
根据排序方式: ,排序的记录
例子7
KeyWordQuery.java
package database.operation;
import java.sql.*;
public class KeyWordQuery
{ String ziduan="", //字段
keyWord=""; //关键字
StringBuffer queryResult;
public KeyWordQuery()
{ queryResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){ }
}
public void setKeyWord(String s)
{ keyWord=s.trim();
try{ byte bb[]=keyWord.getBytes("ISO-8859-1");
keyWord=new String(bb,"gb2312");
}
catch(Exception e){}
}
public String getKeyWord()
{ return keyWord;
}
public void setZiduan(String s)
{ ziduan=s.trim();
try{ byte bb[]=ziduan.getBytes("ISO-8859-1");
ziduan=new String(bb,"gb2312");
}
catch(Exception e){}
}
public String getZiduan()
{ return ziduan;
}
public StringBuffer getQueryResult()
{ String condition="SELECT * FROM employee Where "+ziduan+" Like '%"+keyWord+"%'";
StringBuffer str=f(condition);
return str;
}
public StringBuffer f(String condition)
{ StringBuffer str=new StringBuffer();
Connection con;
Statement sql;
ResultSet rs;
try { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
con=DriverManager.getConnection(uri,"sa","sa");
sql=con.createStatement();
rs=sql.executeQuery(condition);
str.append("");
str.append(""+"雇员号");
str.append(" "+"姓名");
str.append(" "+"出生日期");
str.append(" "+"薪水");
while(rs.next())
{ str.append(" ");
str.append(""+rs.getString(1)+" ");
str.append(""+rs.getString(2)+" ");
str.append(""+rs.getDate(3)+" ");
str.append(""+rs.getString(4)+" ");
str.append(" ");
}
str.append("");
con.close();
}
catch(SQLException e)
{ System.out.println(e);
}
return str;
}
}
keyWord.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.*" %>
含有关键字
的记录:
例子8
AddBean.java
package database.operation;
import java.sql.*;
public class AddBean
{ String number="", //雇员号
name="", //姓名
birthday=""; //出生日期
float salary; //薪水
String addMessage="";
public AddBean()
{ try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){ }
}
public void setNumber(String s)
{ number=s.trim();
}
public void setName(String s)
{ name=s.trim();
try{ byte bb[]=name.getBytes("ISO-8859-1");
name=new String(bb,"gb2312");
}
catch(Exception e){}
}
public void setBirthday(String s)
{ birthday=s.trim();
}
public void setSalary(float n)
{ salary=n;
}
public String getAddMessage()
{ String insertCondition="INSERT employee VALUES( '"+number+
"', '"+name+"','"+birthday+"',"+salary+")";
String str="";
Connection con;
Statement sql;
try { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
con=DriverManager.getConnection(uri,"sa","sa");
sql=con.createStatement();
if(number.length()>0)
{ int m=sql.executeUpdate(insertCondition);
if(m!=0)
{ str="对表中添加"+m+"条记录成功";
}
else
{ str="添加记录失败";
}
}
else
{ str="必须要有雇员号";
}
con.close();
}
catch(SQLException e)
{ str="输入的雇员不允许重复"+e;
}
return str;
}
}
add.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="database.operation.*" %>
雇员号是主键,不可重复,请输入新记录的相应字段的值:
例子9
ShowRecordByPage.java
package database.operation;
import java.sql.*;
import com.sun.rowset.*;
public class ShowRecordByPage
{ int pageSize=10; //每页显示的记录数
int pageAllCount=0; //分页后的总页数
int showPage=1 ; //当前显示页
StringBuffer presentPageResult; //显示当前页内容
CachedRowSetImpl rowSet; //用于存储ResultSet对象
String databaseName=""; //数据库名称
String tableName=""; //表的名字
String user="" ; //用户
String password="" ; //密码
String 字段[]=new String[100] ;
int 字段个数=0;
public ShowRecordByPage()
{ presentPageResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
}
catch(Exception e){}
}
public void setPageSize(int size)
{ pageSize=size;
字段个数=0;
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
try{ Connection con=DriverManager.getConnection(uri,user,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int k=0;
while(rs1.next())
{ 字段个数++;
字段[k]=rs1.getString(4); //获取字段的名字
k++;
}
Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=sql.executeQuery("SELECT * FROM "+tableName);
rowSet=new CachedRowSetImpl(); //创建行集对象
rowSet.populate(rs);
con.close(); //关闭连接
rowSet.last();
int m=rowSet.getRow(); //总行数
int n=pageSize;
pageAllCount=((m%n)==0)?(m/n):(m/n+1);
}
catch(Exception exp){}
}
public int getPageSize()
{ return pageSize;
}
public int getPageAllCount()
{ return pageAllCount;
}
public void setShowPage(int n)
{ showPage=n;
}
public int getShowPage()
{ return showPage;
}
public StringBuffer getPresentPageResult()
{ if(showPage>pageAllCount)
showPage=1;
if(showPage<=0)
showPage=pageAllCount;
presentPageResult=show(showPage);
return presentPageResult;
}
public StringBuffer show(int page)
{ StringBuffer str=new StringBuffer();
str.append("");
str.append("");
for(int i=0;i<字段个数;i++)
{ str.append(""+字段[i]+" ");
}
str.append(" ");
try{ rowSet.absolute((page-1)*pageSize+1);
for(int i=1;i<=pageSize;i++)
{ str.append("");
for(int k=1;k<=字段个数;k++)
{ str.append(""+rowSet.getString(k)+" ");
}
str.append(" ");
rowSet.next();
}
}
catch(SQLException exp){}
str.append("
");
return str;
}
public void setDatabaseName(String s)
{ databaseName=s.trim();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ tableName=s.trim();
}
public String getTableName()
{ return tableName;
}
public void setPassword(String s)
{ password=s.trim();;
}
public void setUser(String s)
{ user=s.trim();
}
public String getUser()
{ return user;
}
}
showByPage.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="database.operation.*" %>
数据库
中
表的记录将被分页显示。
共有 页.
每页最多显示 条记录。
当前显示第 页,
单击“前一页”或“下一页”按纽查看记录
例子10
linkOracle.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<% Connection con=null;
Statement sql=null;
ResultSet rs=null;
try{ Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e){}
try
{ con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.35:1521:Lea",
"scott","tiger");
sql=con.createStatement();
rs=sql.executeQuery("select * from emp");
out.print("");
out.print("");
out.print(""+"EMPNO");
out.print(" "+"Ename");
out.print(" ");
while(rs.next())
{ out.print("");
int n=rs.getInt(1);
out.print(""+n+" ");
String e=rs.getString(2);
out.print(""+e+" ");
out.print(" ") ;
}
out.print("
");
con.close();
}
catch(SQLException e1)
{out.print(""+e1);
}
%>
例子11
linkMySql.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<% Connection con;
Statement sql;
ResultSet rs;
try { Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e)
{ out.print(e);
}
try { String uri= "jdbc:mysql://localhost/factory";
con=DriverManager.getConnection(uri,"root","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM employee");
out.print("");
while(rs.next())
{ out.print("");
out.print(""+rs.getString(1)+" ");
out.print(""+rs.getString(2)+" ");
out.print(""+rs.getDate(3)+" ");
out.print(""+rs.getFloat(4)+" ");
out.print(" ") ;
}
out.print("
");
con.close();
}
catch(SQLException e1)
{ out.print(e1);
}
%>
例子12
MySqlBean.java
package database.operation;
import java.sql.*;
public class MySqlBean
{ String databaseName=""; //数据库名
String tableName=""; //表名
String user="" ; //用户
String secret="" ; //密码
StringBuffer queryResult; //查询结果
public MySqlBean()
{ queryResult=new StringBuffer();
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
}
public void setDatabaseName(String s)
{ databaseName=s.trim();
queryResult=new StringBuffer();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ tableName=s.trim();
queryResult=new StringBuffer();
}
public String getTableName()
{ return tableName;
}
public void setSecret(String s)
{ secret=s.trim();
queryResult=new StringBuffer();
}
public String getSecret()
{ return secret;
}
public void setUser(String s)
{ user=s.trim();
queryResult=new StringBuffer();
}
public String getUser()
{ return user;
}
public StringBuffer getQueryResult()
{ Connection con;
Statement sql;
ResultSet rs;
try { queryResult.append("");
String uri= "jdbc:mysql://localhost/factory";
String user="root";
String password="123";
con=DriverManager.getConnection(uri,user,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int 字段个数=0;
queryResult.append("");
while(rs1.next())
{ 字段个数++;
String clumnName=rs1.getString(4);
queryResult.append(""+clumnName+" ");
}
queryResult.append(" ");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM "+tableName);
while(rs.next())
{ queryResult.append("");
for(int k=1;k<=字段个数;k++)
{ queryResult.append(""+rs.getString(k)+" ");
}
queryResult.append(" ");
}
queryResult.append("
");
con.close();
}
catch(SQLException e)
{ queryResult.append("请输入正确的用户名和密码");
}
return queryResult;
}
}
mysql.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.MySqlBean" %>
在 表查询到记录:
例子13
inquireExcel.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<% Connection con;
Statement sql;
ResultSet rs;
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{ con=DriverManager.getConnection("jdbc:odbc:star","","");
sql=con.createStatement();
sql.executeUpdate("UPDATE message SET 品名='电缆线' WHERE 货号='ED56G'");
rs=sql.executeQuery("SELECT * FROM message");
out.print("");
out.print("");
out.print(""+"货号");
out.print(" "+"品名");
out.print(" "+"单位");
out.print(" "+"单价");
out.print(" "+"库存");
out.print(" ");
while(rs.next())
{ out.print("");
out.print(""+rs.getString(1)+" ");
out.print(""+rs.getString(2)+" ");
out.print(""+rs.getString(3)+" ");
out.print(""+rs.getString(4)+" ");
out.print(""+rs.getString(5)+" ");
out.print(" ") ;
}
out.print("
");
con.close();
}
catch(SQLException e1) {}
%>
例子14
ApplicationCon.java
package database.operation;
import java.sql.*;
import java.util.LinkedList;
public class ApplcationCon
{ LinkedList list; //存放Connection对象的链表
public ApplcationCon()
{ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e) {}
list=new LinkedList();
for(int k=0;k<=10;k++) 创建10个连接
{ try{
String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
String id="sa";
String password="sa";
Connection con=DriverManager.getConnection(uri,id,password);
list.add(con);
}
catch(SQLException e){}
}
}
public synchronized Connection getOneConnetion()
{ if(list.size()>0)
return list.removeFirst();//链表删除第一个节点,并返回该节点中的连接对象
else
return null;
}
public synchronized void putBackOneConnetion(Connection con)
{ list.addFirst(con);
}
}
UseConBean.java
package database.operation;
import java.sql.*;
public class UseConBean
{ String tableName=""; //表名
StringBuffer queryResult; //查询结果
Connection con;
public UseConBean()
{ queryResult=new StringBuffer();
}
public void setTableName(String s)
{ tableName=s.trim();
queryResult=new StringBuffer();
}
public String getTableName()
{ return tableName;
}
public void setConnection(Connection con)
{ this.con=con;
}
public StringBuffer getQueryResult()
{ Statement sql;
ResultSet rs;
try{ queryResult.append("");
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int 字段个数=0;
queryResult.append("");
while(rs1.next())
{ 字段个数++;
String clumnName=rs1.getString(4);
queryResult.append(""+clumnName+" ");
}
queryResult.append(" ");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM "+tableName);
while(rs.next())
{ queryResult.append("");
for(int k=1;k<=字段个数;k++)
{ queryResult.append(""+rs.getString(k)+" ");
}
queryResult.append(" ");
}
queryResult.append("
");
}
catch(SQLException e)
{ queryResult.append("请输入正确的表名"+e);
}
return queryResult;
}
}
chaxun.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.*" %>
<%@ page import="java.sql.*" %>
<% Connection connection=conSet.getOneConnetion();
inquire.setConnection(connection);
%>
你连接的数据库是factory
在 表查询到记录:
<% conSet.putBackOneConnetion(connection);
%>
例子15
PreparedQueryBean.java
package database.operation;
import java.sql.*;
public class PreparedQueryBean
{ String databaseName=""; //数据库名称
String tableName=""; //表的名字
String user="" ; //用户
String password="" ; //密码
StringBuffer queryResult; //查询结果
public PreparedQueryBean()
{ queryResult=new StringBuffer();
try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e)
{ queryResult=new StringBuffer();
queryResult.append(""+e);
}
}
public void setDatabaseName(String s)
{ queryResult=new StringBuffer();
databaseName=s.trim();
}
public String getDatabaseName()
{ return databaseName;
}
public void setTableName(String s)
{ queryResult=new StringBuffer();
tableName=s.trim();
}
public String getTableName()
{ return tableName;
}
public void setPassword(String s)
{ password=s.trim();;
}
public String getPassword()
{ return password;
}
public void setUser(String s)
{ user=s.trim();;
}
public String getUser()
{ return user;
}
public StringBuffer getQueryResult()
{ Connection con;
PreparedStatement sql;
ResultSet rs;
try { queryResult.append("");
String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
con=DriverManager.getConnection(uri,user,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,tableName,null);
int 字段个数=0;
queryResult.append("");
while(rs1.next())
{ 字段个数++;
String clumnName=rs1.getString(4);
queryResult.append(""+clumnName+" ");
}
queryResult.append(" ");
sql=con.prepareStatement("SELECT * FROM "+tableName); //预处理语句
rs=sql.executeQuery();
while(rs.next())
{ queryResult.append("");
for(int k=1;k<=字段个数;k++)
{ queryResult.append(""+rs.getString(k)+" ");
}
queryResult.append(" ");
}
queryResult.append("
");
con.close();
}
catch(SQLException e)
{ queryResult.append(e);
}
return queryResult;
}
}
pre.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import=" database.operation.PreparedQueryBean" %>
使用预处理语句查询数据库:
例子16
AddRecordBean.java
package database.operation;
import java.sql.*;
public class AddRecordBean
{ String number="", //雇员号
name="", //姓名
birthday; //出生日期
float salary; //薪水
boolean ok=false;
public AddRecordBean()
{ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(ClassNotFoundException e){}
}
public void setNumber(String s)
{ number=s.trim();
try{ byte bb[]=number.getBytes("ISO-8859-1");
number=new String(bb,"gb2312");
}
catch(Exception e){}
}
public void setName(String s)
{ name=s.trim();
try{ byte bb[]=name.getBytes("ISO-8859-1");
name=new String(bb,"gb2312");
}
catch(Exception e){}
}
public void setSalary(float n)
{ salary=n;
}
public void setBirthday(String b)
{ birthday=b;
}
public boolean getOk()
{ return ok;
}
public String getAddMessage()
{ String str="";
Connection con;
PreparedStatement sql;
try { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
con=DriverManager.getConnection(uri,"sa","sa");
String insertCondition="INSERT INTO employee VALUES (?,?,?,?)";
sql=con.prepareStatement(insertCondition);
if(number.length()>0)
{ sql.setString(1,number);
sql.setString(2,name);
sql.setString(3,birthday);
sql.setFloat(4,salary);
int m=sql.executeUpdate();
if(m!=0)
{ str="对表中添加"+m+"条记录成功";
ok=true;
}
else
{ str="添加记录失败";
}
}
else
{ str="必须要有雇员号";
}
con.close();
}
catch(SQLException e)
{ str="你还没有提供添加的数据或"+e;
}
return str;
}
}
addRecord.jsp
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="database.operation.ConditionQuery"%>
<%@ page import="database.operation.AddRecordBean"%>
雇员号是主键,不可重复,请输入新记录的相应字段的值:
你添加记录操作的结果:
添加的记录是:
<% if(add.getOk()==true)
{
%>
<% }
%>
你可能感兴趣的:(jsp教学,jsp,string,sqlserver,exception,数据库,input)
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
daixin8848
缓存 redis java 开发语言
缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力-给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮-互斥锁:缓存失败时,只允许一个请求去加载数据并更新缓存,其他请求阻塞
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
2023-01-26
胡喜平
我觉得《可见的学习》一书确实从底层逻辑说清楚了,教学的本质。可是太多术语和概念,一时间难以消化啊。而且知道和懂得有距离,运用就更不行了,需要高手和专家的指导。我需要多听听新课标的讲座了,来反复印证。读论文也有了一点点灵感,明天修改我的论文。
md5加密
落地成佛
using(MD5md5=MD5.Create()){byte[]byteHash=md5.ComputeHash(System.Text.Encoding.Default.GetBytes(s));stringstrRes=BitConverter.ToString(byteHash).Replace("-","");returnstrRes.ToUpper();}
【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge
本本本添哥
002 - 进阶开发能力 java
一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1
代码随想录算法训练营第三十五天
01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new
漫步,跳出藩篱
张巧金沙
最近的教学,倍感不爽。一为这国庆之假,把这课上得支离破碎的。放假前,上了四天课,但我却只上了三天,9月30日,我工作室在搞活动,全天的活动,课当然未能上。10月8日学生回校,上了两天课,学生又放回家了。就觉得学生刚有点状态,又回去逍遥去了。感觉吧,教学内容也不敢大胆甩开膀子去教学,所以呀,这教学内容还真上不走,而且学生学下来效果特差。这不,国庆放假前的一个周,测试了两次,均为第一单元,是自考试以来
深入理解 Tomcat Wrapper 原理
北漂老男人
Tomcat tomcat java
深入理解TomcatWrapper原理一、引言在Tomcat的分层容器架构中,Wrapper作为最底层的容器,专门负责管理单个Servlet的生命周期及请求分发。每一个Servlet(包括JSP、Filter等)都对应一个Wrapper。Wrapper是Servlet规范与Tomcat容器实现之间的桥梁,直接关系到请求的分发效率、Servlet的加载与重用、安全隔离等。本文将系统剖析Wrapper
聊斋那些事儿
徒步取经人
网上听一网友说他爸胆子很大,还无神论者,去他们以前得中学看学校了,听他说有一次晚上11点多,他爸爸去关教学楼的大门,走到楼口的时候清晰的听见有人在哭,声音好像在三四楼的样子传出来的,总共就四楼,那个学校,他爸爸一想,谁呀,这么晚了不会有女孩子被男的欺负了吧?就拿着手电筒还有棍子,想着自己一个人还是有点怕,就跑上去了,跑到三楼一听不对,应该是在四楼,就又往上爬上去了,为了给自己壮胆,跑到四楼就喊,谁
语文教学反思 ——一单元测试
一抹_绿茶香
我喜欢上语文课,现在最开心的时刻也就是课上那45分钟了。它可以让我和孩子们骑上骏马驰骋在知识的草原上,可以让我们乘着巨轮在书籍的海洋里任意航行……周三举行了一单元测试,今晚一单元的所有内容暂时告一段落。对于这单元我有如下思考:本单元的主题词是“读书”,几篇课文都是围绕着读书来编排的。里面有讲读书乐趣的,讲读书方法的,还有孩子们第一次接触的访谈录等。微笑班级从一年级下学期就开始阅读“闲书”,所以教学
MySQL复习题
一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA
Android GreenDao介绍和Generator生成表对象代码
目录(?)[-]介绍创建工程转载请注明:http://blog.csdn.net/sinat_30276961/article/details/50052109最近无意中发现了GreenDao,然后查看了一些资料后,发现这个数据库框架很适合用,于是乎,查看了官网的api,并自己写了一个小应用总结一下它的使用方法。介绍按照国际惯例,在开篇,总要先介绍一下什么是GreenDao吧。首先需要说明的是Gr
Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】
Tony666688888
java windows 开发语言
针对集合排序,java8可以用Stream流的sorted()进行排序。示例Bean以下我们会使用这个Bean来做示例。publicclassOrder{privateStringweight;privateDoubleprice;privateStringdateStr;//忽略getter、setter、构造方法、toString}字段排序首先是比较器Comparator,形式如下:Compa
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
Mac OSX 下的mysql数据库文件存放位置
Bruuuces
mysql mac osx 位置 存放
之前我的mysql的系统数据库里的表被我玩坏了,万般无奈之下只得删除所有mysql的东西重新构建数据库。按照网上搜到的内容删除后重装发现数据库没有什么变化。于是自己在每个可能存放数据库文件的目录查找,最终确认目录位置如下:使用HomeBrew安装为/usr/local/var/mysql使用官方下载的dmg镜像安装为/usr/local/mysql删除这个目录再重新安装mysql就会重新生成系统数
《数字时代的学与教》第三模块共读心得
恭昌
第三模块的主题是教法学法,主要用十一讲来阐述,分别是:同侪教学法、创造学习的新状态、讨论对话还是合作、解锁“拼图法”、把握合作学习五要素、TBL团队合作学习法、游戏式小组合作学习法、差异化教学法、从学科课堂开始的“创客教育”、探究式学习法及搭建“教学脚手架”。难度适中,同伴互助,学到知识,成就感强。教师要创造学生学习的新状态,让学生养成矫正性学习的新状态,即认识错误到自我改正错误,形成新的正确认识
mac升级mysql_Mac OSX下的MySQL数据库升级
weixin_39801714
mac升级mysql
MacOSX下的数据库升级最麻烦的不过权限的问题.本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式,MacPorts/Homebrew的方式大同小异.从5.6.17升级到5.7.18安装目录信息ls-al/usr/local|grepmysqllrwxr-xr-x1rootwheel30B52100:39mysql@->mysql-5.6.17-osx10.7-x86_64drwxr-
读《教学勇气》有感
c养一盆铜钱草
帕尔默的《教学勇气》这本书买了已有几年,记得以前拿起读过,总感觉晦涩难懂,没看几页就被劝退。而如今再次拾起它,是因为眼睛里的血丝,不再适合对着手机和电脑,只能转战纸质书。第一章所提到的教学中自身认同和完整,不就是这个暑假写作课当中反复听到的从我出发吗?对自己进行剖析,找到自己的长处与短处,然后与教学进行结合,只有从“我”出发,才能有底气。书中说:我们更多地了解了自我独特性,我们就能学到展示而非掩饰
[Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
这些不会的
解释:这个错误是很常见的错误,错误的提示已经很清楚了就是java的Object数组不能转换成为String[]数组,这就说明你要转换的数组它本身是Object类型的数组,但是你却非要把它转换为String类的数组,这当然是错误的。示例:[java]viewplaincopypackagecom.dada;importjava.util.ArrayList;importjava.util.List;
【MySQL】MySQL数据库如何改名
武昌库里写JAVA
面试题汇总与解析 spring boot vue.js sql java 学习
MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://
HikariCP调试日志深度解析:生产环境故障排查完全指南
HikariCP调试日志深度解析:生产环境故障排查完全指南更新时间:2025年7月4日|作者:资深架构师|适用版本:HikariCP5.x+|难度等级:中高级前言在生产环境中,数据库连接池往往是系统性能的关键瓶颈。HikariCP作为当前最流行的Java连接池,其调试日志包含了丰富的运行时信息,能够帮助我们快速定位和解决各种连接池相关问题。本文将深入解析HikariCP的日志体系,提供一套完整的故
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
修改gitlab默认的语言
Victor刘
gitlab
文章目录网上的方法1.采用数据库触发器的方法2.登录pg库2.1查看表2.2创建function2.3创建触发器2.4修改历史数据网上的方法网上修改/opt/gitlab/embedded/service/gitlab-rails/config/application.rb的方法,我试了,没生效,没进一步研究1.采用数据库触发器的方法2.登录pg库su-gitlab-psqlpsql-h/var/
如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器
山岚的运维笔记
Linux 运维及使用 linux 服务器 ubuntu redis 数据库
Redis(RemoteDictionaryServer,远程字典服务器)是一种内存数据结构存储,通常用作NoSQL数据库、缓存和消息代理。它是开源的,因此用户可以免费安装,无需支付任何费用。Redis旨在为需要快速数据访问和低延迟的应用程序提供速度和效率。Redis支持多种数据类型,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)、有序集合(SortedS
VUE 座位图功能+扩展
NUZGNAW
vue.js javascript 前端
1、通过循环画出页面座位图0"style="display:table;margin:0auto;min-height:472px;position:relative;">{{i.sign}}2、画出右下角的预览图3、编写对应js方法watch:{seatList:{handler(newVal,oldVal){if(this.seatList&&!stringBlank(this.seatLis
数据库基础概念梳理
22:30Plane-Moon
数据库
1.数据存储类型表(Table):存储结构化数据的标准方式,数据以行和列的形式组织,具有固定的格式。非结构化数据(UnstructuredData):如音频、视频、图片、文本文档等,其格式不固定,不易直接用表存储。2.SQL的核心优势SQL尤其擅长处理和操作存储在表中的结构化数据。2.1数据类型约束(DataTypeConstraints):定义列可存储的数据种类。整数类型:TINYINT(1字节
SQL笔记纯干货
AI入门修炼
oracle 数据库 sql
软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表
Ubuntu Docker 安装Redis
LLLL96
Ubuntu docker docker redis ubuntu
目录介绍1.数据结构丰富2.高性能3.持久化1.拉取Redis镜像2.创建挂载目录(可选)3.配置Redis持久化(可选)4.使用配置文件运行容器5.查看redis日志介绍1.数据结构丰富Redis支持多种数据结构,包括:字符串(String):可以用来存储任何类型的数据,例如文本、数字或二进制数据。哈希(Hash):存储字段和值的映射,适合用于表示对象。列表(List):有序的字符串列表,可以用
Js函数返回值
_wy_
js return
一、返回控制与函数结果,语法为:return 表达式;作用: 结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二、返回控制语法为:return;作用: 结束函数执行,返回调用函数,而且把undefined作为函数的结果 在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性
MySQL 的 char 与 varchar
bylijinnan
mysql
今天发现,create table 时,MySQL 4.1有时会把 char 自动转换成 varchar
测试举例:
CREATE TABLE `varcharLessThan4` (
`lastName` varchar(3)
) ;
mysql> desc varcharLessThan4;
+----------+---------+------+-
Quartz——TriggerListener和JobListener
eksliang
TriggerListener JobListener quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208624 一.概述
listener是一个监听器对象,用于监听scheduler中发生的事件,然后执行相应的操作;你可能已经猜到了,TriggerListeners接受与trigger相关的事件,JobListeners接受与jobs相关的事件。
二.JobListener监听器
j
oracle层次查询
18289753290
oracle;层次查询;树查询
.oracle层次查询(connect by)
oracle的emp表中包含了一列mgr指出谁是雇员的经理,由于经理也是雇员,所以经理的信息也存储在emp表中。这样emp表就是一个自引用表,表中的mgr列是一个自引用列,它指向emp表中的empno列,mgr表示一个员工的管理者,
select empno,mgr,ename,sal from e
通过反射把map中的属性赋值到实体类bean对象中
酷的飞上天空
javaee 泛型 类型转换
使用过struts2后感觉最方便的就是这个框架能自动把表单的参数赋值到action里面的对象中
但现在主要使用Spring框架的MVC,虽然也有@ModelAttribute可以使用但是明显感觉不方便。
好吧,那就自己再造一个轮子吧。
原理都知道,就是利用反射进行字段的赋值,下面贴代码
主要类如下:
import java.lang.reflect.Field;
imp
SAP HANA数据存储:传统硬盘的瓶颈问题
蓝儿唯美
HANA
SAPHANA平台有各种各样的应用场景,这也意味着客户的实施方法有许多种选择,关键是如何挑选最适合他们需求的实施方案。
在 《Implementing SAP HANA》这本书中,介绍了SAP平台在现实场景中的运作原理,并给出了实施建议和成功案例供参考。本系列文章节选自《Implementing SAP HANA》,介绍了行存储和列存储的各自特点,以及SAP HANA的数据存储方式如何提升空间压
Java Socket 多线程实现文件传输
随便小屋
java socket
高级操作系统作业,让用Socket实现文件传输,有些代码也是在网上找的,写的不好,如果大家能用就用上。
客户端类:
package edu.logic.client;
import java.io.BufferedInputStream;
import java.io.Buffered
java初学者路径
aijuans
java
学习Java有没有什么捷径?要想学好Java,首先要知道Java的大致分类。自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE
APP推广
aoyouzi
APP 推广
一,免费篇
1,APP推荐类网站自主推荐
最美应用、酷安网、DEMO8、木蚂蚁发现频道等,如果产品独特新颖,还能获取最美应用的评测推荐。PS:推荐简单。只要产品有趣好玩,用户会自主分享传播。例如足迹APP在最美应用推荐一次,几天用户暴增将服务器击垮。
2,各大应用商店首发合作
老实盯着排期,多给应用市场官方负责人献殷勤。
3,论坛贴吧推广
百度知道,百度贴吧,猫扑论坛,天涯社区,豆瓣(
JSP转发与重定向
百合不是茶
jsp servlet Java Web jsp转发
在servlet和jsp中我们经常需要请求,这时就需要用到转发和重定向;
转发包括;forward和include
例子;forwrad转发; 将请求装法给reg.html页面
关键代码;
req.getRequestDispatcher("reg.html
web.xml之jsp-config
bijian1013
java web.xml servlet jsp-config
1.作用:主要用于设定JSP页面的相关配置。
2.常见定义:
<jsp-config>
<taglib>
<taglib-uri>URI(定义TLD文件的URI,JSP页面的tablib命令可以经由此URI获取到TLD文件)</tablib-uri>
<taglib-location>
TLD文件所在的位置
JSF2.2 ViewScoped Using CDI
sunjing
CDI JSF 2.2 ViewScoped
JSF 2.0 introduced annotation @ViewScoped; A bean annotated with this scope maintained its state as long as the user stays on the same view(reloads or navigation - no intervening views). One problem w
【分布式数据一致性二】Zookeeper数据读写一致性
bit1129
zookeeper
很多文档说Zookeeper是强一致性保证,事实不然。关于一致性模型请参考http://bit1129.iteye.com/blog/2155336
Zookeeper的数据同步协议
Zookeeper采用称为Quorum Based Protocol的数据同步协议。假如Zookeeper集群有N台Zookeeper服务器(N通常取奇数,3台能够满足数据可靠性同时
Java开发笔记
白糖_
java开发
1、Map<key,value>的remove方法只能识别相同类型的key值
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"a");
map.put(2,"b");
map.put(3,"c"
图片黑色阴影
bozch
图片
.event{ padding:0; width:460px; min-width: 460px; border:0px solid #e4e4e4; height: 350px; min-heig
编程之美-饮料供货-动态规划
bylijinnan
动态规划
import java.util.Arrays;
import java.util.Random;
public class BeverageSupply {
/**
* 编程之美 饮料供货
* 设Opt(V’,i)表示从i到n-1种饮料中,总容量为V’的方案中,满意度之和的最大值。
* 那么递归式就应该是:Opt(V’,i)=max{ k * Hi+Op
ajax大参数(大数据)提交性能分析
chenbowen00
Web Ajax 框架 浏览器 prototype
近期在项目中发现如下一个问题
项目中有个提交现场事件的功能,该功能主要是在web客户端保存现场数据(主要有截屏,终端日志等信息)然后提交到服务器上方便我们分析定位问题。客户在使用该功能的过程中反应点击提交后反应很慢,大概要等10到20秒的时间浏览器才能操作,期间页面不响应事件。
根据客户描述分析了下的代码流程,很简单,主要通过OCX控件截屏,在将前端的日志等文件使用OCX控件打包,在将之转换为
[宇宙与天文]在太空采矿,在太空建造
comsci
我们在太空进行工业活动...但是不太可能把太空工业产品又运回到地面上进行加工,而一般是在哪里开采,就在哪里加工,太空的微重力环境,可能会使我们的工业产品的制造尺度非常巨大....
地球上制造的最大工业机器是超级油轮和航空母舰,再大些就会遇到困难了,但是在空间船坞中,制造的最大工业机器,可能就没
ORACLE中CONSTRAINT的四对属性
daizj
oracle CONSTRAINT
ORACLE中CONSTRAINT的四对属性
summary:在data migrate时,某些表的约束总是困扰着我们,让我们的migratet举步维艰,如何利用约束本身的属性来处理这些问题呢?本文详细介绍了约束的四对属性: Deferrable/not deferrable, Deferred/immediate, enalbe/disable, validate/novalidate,以及如
Gradle入门教程
dengkane
gradle
一、寻找gradle的历程
一开始的时候,我们只有一个工程,所有要用到的jar包都放到工程目录下面,时间长了,工程越来越大,使用到的jar包也越来越多,难以理解jar之间的依赖关系。再后来我们把旧的工程拆分到不同的工程里,靠ide来管理工程之间的依赖关系,各工程下的jar包依赖是杂乱的。一段时间后,我们发现用ide来管理项程很不方便,比如不方便脱离ide自动构建,于是我们写自己的ant脚本。再后
C语言简单循环示例
dcj3sjt126com
c
# include <stdio.h>
int main(void)
{
int i;
int count = 0;
int sum = 0;
float avg;
for (i=1; i<=100; i++)
{
if (i%2==0)
{
count++;
sum += i;
}
}
avg
presentModalViewController 的动画效果
dcj3sjt126com
controller
系统自带(四种效果):
presentModalViewController模态的动画效果设置:
[cpp]
view plain
copy
UIViewController *detailViewController = [[UIViewController al
java 二分查找
shuizhaosi888
二分查找 java二分查找
需求:在排好顺序的一串数字中,找到数字T
一般解法:从左到右扫描数据,其运行花费线性时间O(N)。然而这个算法并没有用到该表已经排序的事实。
/**
*
* @param array
* 顺序数组
* @param t
* 要查找对象
* @return
*/
public stati
Spring Security(07)——缓存UserDetails
234390216
ehcache 缓存 Spring Security
Spring Security提供了一个实现了可以缓存UserDetails的UserDetailsService实现类,CachingUserDetailsService。该类的构造接收一个用于真正加载UserDetails的UserDetailsService实现类。当需要加载UserDetails时,其首先会从缓存中获取,如果缓存中没
Dozer 深层次复制
jayluns
VO maven po
最近在做项目上遇到了一些小问题,因为架构在做设计的时候web前段展示用到了vo层,而在后台进行与数据库层操作的时候用到的是Po层。这样在业务层返回vo到控制层,每一次都需要从po-->转化到vo层,用到BeanUtils.copyProperties(source, target)只能复制简单的属性,因为实体类都配置了hibernate那些关联关系,所以它满足不了现在的需求,但后发现还有个很
CSS规范整理(摘自懒人图库)
a409435341
html UI css 浏览器
刚没事闲着在网上瞎逛,找了一篇CSS规范整理,粗略看了一下后还蛮有一定的道理,并自问是否有这样的规范,这也是初入前端开发的人一个很好的规范吧。
一、文件规范
1、文件均归档至约定的目录中。
具体要求通过豆瓣的CSS规范进行讲解:
所有的CSS分为两大类:通用类和业务类。通用的CSS文件,放在如下目录中:
基本样式库 /css/core
C++动态链接库创建与使用
你不认识的休道人
C++ dll
一、创建动态链接库
1.新建工程test中选择”MFC [dll]”dll类型选择第二项"Regular DLL With MFC shared linked",完成
2.在test.h中添加
extern “C” 返回类型 _declspec(dllexport)函数名(参数列表);
3.在test.cpp中最后写
extern “C” 返回类型 _decls
Android代码混淆之ProGuard
rensanning
ProGuard
Android应用的Java代码,通过反编译apk文件(dex2jar、apktool)很容易得到源代码,所以在release版本的apk中一定要混淆一下一些关键的Java源码。
ProGuard是一个开源的Java代码混淆器(obfuscation)。ADT r8开始它被默认集成到了Android SDK中。
官网:
http://proguard.sourceforge.net/
程序员在编程中遇到的奇葩弱智问题
tomcat_oracle
jquery 编程 ide
现在收集一下:
排名不分先后,按照发言顺序来的。
1、Jquery插件一个通用函数一直报错,尤其是很明显是存在的函数,很有可能就是你没有引入jquery。。。或者版本不对
2、调试半天没变化:不在同一个文件中调试。这个很可怕,我们很多时候会备份好几个项目,改完发现改错了。有个群友说的好: 在汤匙
解决maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported
xp9802
dependency
解决办法:在plugins之前添加如下pluginManagement,二者前后顺序如下:
[html]
view plain
copy
<build>
<pluginManagement