بسم الله الرحمن الرحيم
*هذا الموضوع مجرد فكرة خطرت على بالي واحببت مشاركتها مع الجميع
قبل البت في الموضوع الرجاء قراءة موضوعي السابق
شرح: طريقة اخذ نسخة احتياطية من قاعدة البيانات
طريقة استعادة نسخة احتياطية مأخوذة مسبقا من قاعدة بيانات MySql
في البداية يجب توفر ملف النسخة الاحتياطية -sql- الذي ينتج من صفحة الـ JSP في الموضوع السابق
نحتاج الى صفحة html و صفحة jsp
الأولى باسم index.html
تحتوي على نموذج ادخال (Form) يحولك الى الصفحة الثانية
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /> <title>Untitled Document</title> </head> <body> <form name="myform" action="active.jsp" method="post" enctype="multipart/form-data"> Specify your File:<br /> <input type="file" name="myfile"><br /><br /> <input type="submit" name="Submit" value="Restore"/> </form> </body> </html>
الصفحة الثانية باسم active.jsp
<%@ page import="java.sql.*, java.io.*, java.util.Date, java.util.StringTokenizer" %>
<%
String contentType = request.getContentType();
System.out.println("Content type is :: " +contentType);
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0))
{
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength)
{
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
String theName = saveFile;
String filename=saveFile.substring(0,saveFile.lastIndexOf("."));
String extension = saveFile.substring(saveFile.lastIndexOf(".")+1,saveFile.length());
if(extension.toLowerCase().equals("sql")){
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
String theData = file.substring(file.lastIndexOf(theName)+theName.length()+5,endPos);
StringTokenizer st = new StringTokenizer(theData,";");
int tokens = st.countTokens();
String[] array=new String[tokens];
for(int lop=0;lop<tokens;lop++) {
array[lop]=st.nextToken()+";";
}
//////////////////////DataBase
String dburl="localhost"; //MySql Url
String port="3306"; //MySql Port
String dbname=""; //DataBase Name
String dbuser="root"; //DataBase UserName
String dbpass="root"; // User Password
String driver="com.mysql.jdbc.Driver"; //Driver
String url="jdbc:mysql://"+dburl+":"+port+"/"+dbname; //URL
///////////////////////////////
int rows = 0;
try
{
Class.forName (driver).newInstance ( );
Connection Connec = DriverManager.getConnection(url, dbuser, dbpass);
for(int lop=0;lop<tokens;lop++) {
Statement Stat1 = Connec.createStatement ( );
rows = rows + Stat1.executeUpdate(array[lop]);
Stat1.close ();
}
Connec.close();
%><br />Restore is completed<br /><%
}
catch (Exception e)
{
String ax="Cannot connect to server : "+e;%>
<%=ax%><%
}
}else{
%>Not sql file<%
}
}
%>ملاحظات:
المتغير dbname يجب ان يكون فارغا كما في هذا المثال
هذه الصفحة مشابهة للصفحة السابقة في كثير من الاشياء
عند تشغيل الصفحة الاولى والضغط على زر Restore
اذا لم يكن الملف صحيح سيبلغك بذلك اما اذا كان صحيح فستخرج لك الرسالة التالية
Restore is completed
هذا الملف من انتاجي ونظرا للحاجة الملحة قررت وضعه هنا
اذا اكان هناك اي سؤال او اشكال الرجاء ابلاغي
تحياتي