简体   繁体   English

在浏览器中执行jdbc applet

[英]Execute jdbc applet in browser

import java.sql.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

/*
<applet code="A0" width=250 height=200>
</applet>
*/

public class A0 extends Applet implements ActionListener,ItemListener
{
String msg="";

Button view,delete,create,edit,reapp,exit;
TextField M_head;
int x,i,ans=0,flag;

public void init()
{
setLayout(new FlowLayout(FlowLayout.CENTER,50,3));

view = new Button("view");
delete = new Button("delete");
create = new Button("create");
edit = new Button("edit");
reapp = new Button("reapp");
exit= new Button("exit");
M_head = new TextField(15);

add(view);
add(delete);
add(create);
System.out.println("vikram");
add(edit);
add(reapp);
add(exit);
System.out.println("phaneendra");
add(M_head);

view.addActionListener(this);
delete.addActionListener(this);
create.addActionListener(this);
edit.addActionListener(this);
reapp.addActionListener(this);
exit.addActionListener(this);
M_head.addActionListener(this);




}

public void actionPerformed(ActionEvent ae)
{

String str=ae.getActionCommand();

if(str.equals("view"))
{msg ="1";}
if(str.equals("delete"))
{msg ="2";}
if(str.equals("create"))
{msg ="3";}
if(str.equals("edit"))
{msg ="4";}
if(str.equals("reapp"))
{msg ="5";}
if(str.equals("exit"))
{msg ="6";}

if(msg=="3")
{

try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//String filename = "E:/vikram/conn/new/db/north.mdb";
String filename = "./db/north.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
//String url ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\cheminDeMaBaseEtNomdeLaBdd";
database+=filename.trim();
String head = M_head.getText();
String head1 = head.trim();
Connection con = DriverManager.getConnection(database,"","");
Statement doo = con.createStatement();
//String vi ="create table head1 (Reapporder integer, Amount integer)";
String vi="insert into head1 values(1,2);";

boolean i=false;
i=doo.execute(vi);

if(i)
M_head.setText("Failed to insert");

else
M_head.setText("record inserted");

}


catch(Exception err)
{
System.out.println("Error :"+err);
}


}




}

public void itemStateChanged(ItemEvent ie)
{
repaint();
}

public void paint(Graphics g)
{
g.drawString(msg,70,200); //No use

g.drawString("ANSWER=",6,200); // No use

}
}

This is A0.txt 这是A0.txt

grant {
permission java.lang.RuntimePermission
"accessClassInPackage.sun.jdbc.odbc";
permission java.util.PropertyPermission
"file.encoding", "read";
};

A0.html file A0.html文件

<html>
<head>


</head>
<body>
<applet code=A0     width=250 height=200></applet>
</body>
</html>

This code is executed in Appletviewer command, but not in any browser 此代码在Appletviewer命令中执行,但在任何浏览器中Appletviewer执行

As commented by others, you really don't want to do this. 正如其他人所评论的那样,您真的不想这样做。

Just create a webservice in the server side (which can be a plain vanilla servlet) and make use of java.net.URLConnection in the applet. 只需在服务器端创建一个Web服务(可以是普通的servlet),然后在applet中使用java.net.URLConnection

Basic Servlet example: 基本Servlet示例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = request.getParameter("action"); // Or request.getPathInfo() whatever you want.
    String result = someDAO.doAction(action);
    response.getWriter().write(result);
}

Basic Applet example: 小程序基本示例:

URL url = new URL("http://example.com/databaseservlet?action=someaction");
URLConnection connection = url.openConnection();
InputStream result = connection.getInputStream(); // Important. This actually fires the request! 

Be careful with SQL injections however. 但是要小心SQL注入 Do in no way pass raw SQL queries as request parameters or pathinfo and use PreparedStatement all the time in the DAO code. 绝对不要将原始SQL查询作为请求参数或pathinfo传递,并始终在DAO代码中使用PreparedStatement

As response data format you can use a plain vanilla String (as given in example) or a XML string or a JSON string or maybe even a fullworthy Java object with a little help of Serialization . 作为响应数据格式,您可以使用纯净的香草字符串(如示例中所示)或XML字符串JSON字符串 ,甚至可以使用完全有价值的Java对象,而无需序列化

You can't do JDBC on an Applet for security reasons. 出于安全原因,您不能在Applet上执行JDBC。

You must write an Enterprise Application (in Java, .NET, Python, PHP) and deploy it to an application server. 您必须编写一个企业应用程序(使用Java,.NET,Python,PHP)并将其部署到应用程序服务器。 In that application you can publish some WebServices so your Applet can finally access your database. 在该应用程序中,您可以发布一些Web服务,以便您的Applet最终可以访问数据库。

Something like this: 像这样:

APPLET <-> APPLICATION SERVER (HTTP communication) <-> BACKEND (database) APPLET <->应用程序服务器(HTTP通信)<-> BACKEND(数据库)

Here is a Web Site explaining some security related Applet stuff. 是一个解释一些与安全性有关的Applet内容的网站。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM