首先你的机器上得装有一款数据库,通常是Oracle,Mssql,MySQL等,不考虑框架等,jsp中主要是利用jdbc进行连接数据库
1,打开数据库服务(你已经设计好了数据库)
2,在class-path中添加相应数据库的连接jar包,3利用jdbc进行 *** 作
例如:
JDBC-环境设置:
请确认您已完成以下设置:
核心JAVA安装
SQL或MySQL数据库安装
除上述者外,需要建立一个数据库,为本程测试项目使用。假设这是EMP,在同一个数据库上创建表Employees。
创建JDBC应用程序:
参与建立一个JDBC应用程序,本教程中按六个步骤进行:
导入包:
这需要你有软件包包含了数据库编程所需的JDBC类。大多数情况下,使用importjavasql就足够了,如下所示:
//STEP1Importrequiredpackages
importjavasql;
注册JDBC驱动程序:
这需要初始化驱动程序,这样就可以打开与数据库的通信信道。以下是代码片段实现这一目标:
//STEP2:RegisterJDBCdriver
ClassforName("commysqljdbcDriver");
打开一个连接:
这需要使用()方法来创建一个Connection对象,它代表一个物理连接的数据库,如下所示:
//STEP3:Openaconnection
//Databasecredentials
staticfinalStringUSER="username";
staticfinalStringPASS="password";
Systemoutprintln("Connectingtodatabase");
conn=(DB_URL,USER,PASS);
执行一个查询:
这需要使用一个对象类型Statement或构建,并提交一个SQL语句到数据库。如下:
//STEP4:Executeaquery
Systemoutprintln("Creatingstatement");
stmt=conn();
Stringsql;
sql="SELECTid,first,last,ageFROMEmployees";
ResultSetrs=stmt(sql);
如果有一个SQLUPDATE,INSERT或DELETE语句,那么需要下面的代码片段:
//STEP4:Executeaquery
Systemoutprintln("Creatingstatement");
stmt=conn();
Stringsql;
sql="DELETEFROMEmployees";
ResultSetrs=stmt(sql);
从结果集中提取数据:
这一步是必需的情况下,从数据库中获取数据。可以使用适当的ResultSetgetXXX()方法来检索的数据结果如下:
//STEP5:Extractdatafromresultset
while(rsnext()){
//Retrievebycolumnname
intid=rsgetInt("id");
intage=rsgetInt("age");
Stringfirst=rsgetString("first");
Stringlast=rsgetString("last");
//Displayvalues
Systemoutprint("ID:"id);
Systemoutprint(",Age:"age);
Systemoutprint(",First:"first);
Systemoutprintln(",Last:"last);
}
清理环境:
应该明确地关闭所有的数据库资源,对依赖于JVM的垃圾收集如下:
//STEP6:Clean-upenvironment
rsclose();
stmtclose();
connclose();
获取表单中的信息,然后插入到Mysql中
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" ">
这个有多种实现方法啊,推荐你使用JSTL表达式
从数据库中查处数据放到List集合中,然后把list放入范围里(request、session等)代码如下:
requestsetAttribute("list",list);
<c:forEach
var="user"
items="${requestScopelist}"
varStatus="num">
${numcount}:${username}<br>
</c:forEach>
就可以得到你要的结果。其中user是个变量,存储了每次循环的一个list值。numcount就代表循环次数
不明白为啥指定json,我的建议是:
1、STRUTS文件标签选择并上传EXCEL文件,示例代码:
<html:form action="/uploadExcelFile/UploadExcelFileActiongo" enctype="multipart/form-data" method="post" onsubmit="return confirm_save()">
<table border="0" cellpadding="0" cellspacing="5" align="center" style="margin:50">
<tr>
<td align="right" nowrap > 请选择Excel文件(<%=excelType%>):</td>
<td align="right" colspan="3" valign="middle" nowrap ><html:file property="aircraftExcel" size="200" style="width:400;height:25" value=""></html:file></td>
</tr><tr>
<td></td>
<td align="right">Excel文件中标题(表头)占行:</td>
<td align="left"><input name="topicRow" value="0" style="width:50" onKeyUp="value=valuereplace(/[\D]/g,'')"/></td>
<TD align="right" nowrap title="上传"><html:submit value="开始更新" style="height:25; width:70"></html:submit></TD>
</tr>
</table>
</html:form>
2、UploadExcelFileAction接收、写入后台指定目录(局部代码)
FileOutputStream fos = null;
try {
//得到文件数据(数组)
byte[] fileDate = ffgetFileData();
//得到服务器硬盘文件夹的绝对路径
ServletContext application = thisgetServlet()getServletContext();
String realPath = applicationgetRealPath("/");
if(excelType==null||excelTypeequals("xlsx"))//默认生成2007以后版本格式
fos = new FileOutputStream(realPath+"aircraftExcelTablexlsx");
else
fos = new FileOutputStream(realPath+"aircraftExcelTablexls");
foswrite(fileDate);
fosclose();
if(excelType==null||excelTypeequals("xlsx"))//默认生成2007以后版本格式
num=ReadExcelSaveToDBReadAndSaveNew(realPath+"aircraftExcelTablexlsx",topicNumber);
else
num=ReadExcelSaveToDBReadAndSave(realPath+"aircraftExcelTablexls",topicNumber);
if(num==-1){
sessionsetAttribute("forwardPage", currentPage);
sessionsetAttribute("prompt", "文件传输失败或无法连接数据库!");
return mappingfindForward("promptpage");
}else if(num==-2){
sessionsetAttribute("forwardPage", currentPage);
sessionsetAttribute("prompt", "Excel文件大于1000条或不能识别!重新制作Excel文件。");
return mappingfindForward("promptpage");
}else if(num==-3){
sessionsetAttribute("forwardPage", currentPage);
sessionsetAttribute("prompt", "Excel文件中包含非法字符(非数字),请修正后重试。");
return mappingfindForward("promptpage");
}
} catch (FileNotFoundException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}finally{
try {
fosclose();
} catch (IOException e) {
eprintStackTrace();
}
}
3、解析读取表数据(POI)并存入数据库(局部代码)
public static int ReadAndSave(String path,String topicNumber){
try {
File file=new File(path);
FileInputStream fs=new FileInputStream(file);
@SuppressWarnings("resource")
HSSFWorkbook workbook=new HSSFWorkbook(fs);
//一共有几张表
int sheet_num=workbookgetNumberOfSheets();
setSheetNumber(0);
setProcess(0);//开始
//循环每个表
for(int i=0;i<sheet_num;i++){
HSSFSheet sheet=workbookgetSheetAt(i);
setSheetNumber(i+1);
if(sheet!=null&&sheetgetPhysicalNumberOfRows()!=0){
int topicNumberNum=IntegerparseInt(topicNumber);//越过首行的标题(如果有)
totalNumber=sheetgetPhysicalNumberOfRows()-topicNumberNum;
//循环各个行
for(int j=sheetgetFirstRowNum()+topicNumberNum;j<=sheetgetPhysicalNumberOfRows();j++){
HSSFRow row=sheetgetRow(j);
String aircraft=null;
//String aircraftType=null;
Double takeoffWeight=000;
Double payloadMax2=000;
int seatNumberMax2=0;
if(row!=null&&rowgetPhysicalNumberOfCells()!=0){
switch(rowgetCell(0)getCellType()){
case CellCELL_TYPE_STRING:
aircraft=(rowgetCell(0)getStringCellValue())trim();
break;
case CellCELL_TYPE_NUMERIC:
aircraft=StringvalueOf(rowgetCell(0)getNumericCellValue())trim();
break;
}
//继续处理其他单元格、行
}
//存入数据库
AircraftTableActionForm atb=new AircraftTableActionForm();
if(aircraft!=null&&!aircraftequals("")){
atbsetAircraft(aircraft);
//set其他值
updateByExcel(atb)!=-1
}
}
如果不想ajax,而且,又不想刷新当前页面,又要实现定时读取,可以考虑用iframe,在iframe中引入另一个页面A,让页面A进行定时刷新,读取数据,再让A页面修改当前页面的数据。看你到底想要实现什么样的。如果还是不知怎么实现,可以一起研究研究。
以上就是关于在jsp编程中如何连接数据库(jsp与数据库连接)全部的内容,包括:在jsp编程中如何连接数据库(jsp与数据库连接)、如何将JSP页面中的表单信息保存到Mysql数据库、jsp 如何把数据库的某个字段的数据以列表的形式显示出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)