LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: moonstar

用java编写建立数据库文件

[复制链接]
发表于 2003-7-3 16:31:35 | 显示全部楼层
用这个命令测试一下:
psql -h 127.0.0.1 -U 用户名 数据库名

输入密码后,看能不能登录,如果不能登录,则需要改动pg_hba.conf里的认证方式了。
 楼主| 发表于 2003-7-3 17:43:07 | 显示全部楼层
谢谢你,我上次有一个地方写错了,我刚才检查出来了,很不好意思给你带来这么多麻烦,现在已经运行成功了
 楼主| 发表于 2003-7-3 18:07:59 | 显示全部楼层
我现在试了一个按照superboy007_200说的建数据库的程序,但没有调试成功.我的程序是:
import java.io.*;
import java.sql.*;
import org.postgresql.Driver;

public class financedata {
    Connection conn;
    Statement stmt;
    String state_code;

    public financedata() throws ClassNotFoundException,FileNotFoundException,IOException,SQLException{
        Class.forName("org.postgresql.Driver");
        conn = DriverManager.getConnection("jdbc:postgresql" ,"postgres", "");
        stmt = conn.createStatement();

        System.out.print("Enter database name:");
        System.out.flush();
        BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
        state_code=r.readLine();

        ResultSet res=stmt.executeQuery("createdb state_code");

        conn.close();
    }

    public static void main(String args[]) {
        try {
            financedata test= new financedata();
        } catch(Exception exc) {
            System.err.println("Exception caught .\n" + exc);
            exc.printStackTrace();
        }
    }
}
结果出现的问题是:
Exception caught.
something unusual has occured to cause the driver to fail.Please report this exception:Exception:java.lang.NullPointerException
Strack Trace:
java.lang.NullPointerException
    at org.postgresql.Connection.openConnection(Connection.java:148)
at org.postgresql.Driver.connect(Driver.java:122)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManger.java:171)
at financedata.<init>(financedata.java:12)
at financedata.main<financedata.java:27>
End of Stack Trace
发表于 2003-7-4 10:38:42 | 显示全部楼层
something unusual has occured to cause the driver to fail.Please report this exception:Exception:java.lang.NullPointerException

看错误提示。
然后用调试程序调试。
有集成环境用集成环境调试。netbeans,jbuilder,都可以。
没有的话,用jdb.如果是tomcat的话,更好办了。
看这篇文章:

http://www-900.ibm.com/developer ... l/j-debug-9-1.shtml
发表于 2003-7-7 14:25:34 | 显示全部楼层
报的是空指针错误。有可能是你的SQL的问题。仔细检查一下。
 楼主| 发表于 2003-7-8 14:22:51 | 显示全部楼层
不会吧,我也是词程序,只不过我是在已经建好的数据库上建了一个表,并且插入了几条数据,执行完全成功呀。
对了,我现在又遇到一个问题,就是我用java程序写了一个程序想生成一个提取动态数据的曲线图,结果却说org.postgresql.Driver连接失败,坐标轴是有的,可就是我在弹出的菜单中说我的数据库连接失败我过一会把我的程序贴出来,请各位帮忙,谢谢
 楼主| 发表于 2003-7-8 14:33:43 | 显示全部楼层
我的曲线图的程序是:
import java.applet.*;
import java.awt.*;
import java.sql.*;
import org.postgresql.Driver;
import java.awt.event.*;


public class QueryStorageData extends Applet{
    Rectangle m_position=new Rectangle(51,10,700,380);
    int hisnum=0;

    //  从数据库中取曲线图所需动态值
    public float[] getcurvevalue(String dataname) {
        float curveval[]=new float[30];
        String query;
        String query1="SELECT rvalue, TO_CHAR(rtime, 'HH24:MI:SS') FROM rsave1 WHERE rdataname=";
        String query2= "  AND TO_CHAR(rtime, 'DD-MM-YYYY')=";
        String query3= "  ORDER BY rtime";
        String temptime;
        int hour, minute;
        int pos1,pos2;
        int count;
   
        try {
            Connection conn;
            Statement stmt;
            ResultSet rset;

           Class.forName("org.postgresql.Driver");
            // 与数据库建立连接
            conn= DriverManager.getConnection("jdbc:postgresql:testdb", "postgres", "");

            // 创建Statement对象用于执行SQL语句,并返回结果
            stmt=conn.createStatement();

            // 获取系统当前时间
            rset=stmt.executeQuery("SELECT TO_CHAR (sysdate, 'HH24:MI-DD-MM-YYYY') from dual");
             rset.next();
            String SqlTime=rset.getString(1);
                pos1=SqlTime.indexOf(":");
                hour=Integer.parseInt(SqlTime.substring(0,pos1));
                pos2=pos1+1;
                pos1=SqlTime.indexOf("-", pos2);
                minute=Integer.parseInt(SqlTime.substring(pos2,pos1));
                hisnum=hour*6+(int)(minute/10);
                String todaytime=SqlTime.substring(pos1+1);

                // 执行查询,获取结果
                query=query1+dataname+query2+"'"+todaytime+ "'"+ query3;
                rset=stmt.executeQuery(query); // 执行查询
                temptime= "";
                count=0;
                while (rset.next()) {
                    temptime=rset.getString(2); // get R_TIME
                    pos1=temptime.indexOf(":");
                    hour=Integer.parseInt(temptime.substring(0,pos1));
                    pos2=pos1+1;
                    pos1=temptime.indexOf(":",pos2);
                    minute=Integer.parseInt(temptime.substring(pos2,pos1));
                    count=hour*6+(int)(minute/10);
                    curveval[count]=rset.getFloat("rvalue");
                }
                stmt.close(); //关闭Stmt对象
                conn.close(); //关闭Conn对象
           } catch (SQLException ex) {
               System.out.println ("\n *** SQLException ***\n");
                while (ex!=null) {
                    System.out.println ("SQLState: "+ ex.getSQLState());
                    System.out.println("Message:"+ ex.getMessage());
                    System.out.println("Vendor:"+ ex.getErrorCode());
                     ex=ex.getNextException();
                    System.out.println("");
                 }
            for (int j=0;j<30;j++)
                  curveval[j]=0;
            } catch (java.lang.Exception ex) {
                 System.out.println ("error:"+ ex.getMessage()+ "\n");
                 PopupFrame msbox=new PopupFrame();
                 msbox.setSize(200,100);
                 msbox.add("Center", new Label ("database connection failed", Label.CENTER));
                 msbox.setLocation(300,250);
                 msbox.show();
                 for (int j=0;j<30;j++) {
                       curveval[j]=0;
                 }
            }
            return curveval;
    }
    public void paint(Graphics g) {
        String dataname= "SY_ZP";
        Font i_font=new Font("Dialog", Font.PLAIN, 16);
        FontMetrics i_fm;
        i_fm=g.getFontMetrics(i_font);
        int maxInt=500;
        int minInt=0;
        float hisval[]=new float[30];
        int h_distance=m_position.height/10;
        int w_distance=(m_position.width-i_fm.stringWidth("500"))/24;
        int rectwidth=24*w_distance;
        g.setFont(i_font);
        g.drawString("0",m_position.x-3-i_fm.stringWidth("0"), m_position.y+ m_position.height+i_fm.getHeight()/2);        
        float interval=(float)(maxInt-minInt)/10;
       
               
        for(int i=1;i<=10;i++) {
            String num=new String(Float.toString(minInt+i*interval));
            g.drawString(num,m_position.x-3-i_fm.stringWidth(num),m_position.y+ m_position.height-i*h_distance+i_font.getSize()/2);
        }
        for( int j=1;j<=24;j++) {
        g.drawString(Integer.toString(j),m_position.x+j*w_distance- i_font.getSize()/2,m_position.y+m_position.height+i_fm.getHeight());
        }

// 画曲线
         hisval=getcurvevalue(dataname); // 从数据库取历史值
         float showval[]=new float[30];
         
          
// 把实际的数据转化为坐标上的值
        for(int i=0; i<30; i++) {
            showval=(hisval-minInt)/(maxInt-minInt);
        }
       
        for(int i=0; i<hisnum-1; i++) {
             g.drawLine(m_position.x+i*rectwidth/30, m_position.y+ m_position.height-
                              (new Float(showval*m_position.height)).intValue(),m_position.x+
                              (i+1)*rectwidth/30, m_position.y+m_position.height-
                              (new Float(showval[i+1]*m_position.height)).intValue());  
        }
// 画坐标轴
        g.fillRect(m_position.x, m_position.y+m_position.height, rectwidth,2);
        g.fillRect(m_position.x, m_position.y, 2, m_position.height);
        g.drawLine(m_position.x, m_position.y, m_position.x-3- i_fm.stringWidth("0"),m_position.y+8);
        g.drawLine(m_position.x+1, m_position.y, m_position.x-2- i_fm.stringWidth("0"), m_position.y+8);
        g.drawLine(m_position.x+rectwidth,m_position.y+m_position.height+1, m_position.x+rectwidth-8,m_position.y+m_position.height+5);
        g.drawLine(m_position.x+rectwidth-1,m_position.y+ m_position.height+1, m_position.x+rectwidth-9,m_position.y+m_position.height+4);
   
        
             
      }
}
// 提示窗口
class PopupFrame extends Frame {
    public boolean handleEvent(Event evt) {
        if (evt.id==Event.WINDOW_DESTROY)
            System.exit(0);
            return super.handleEvent(evt);
            // return super.handleEvent(evt);
    }
}
老说我的error org.postgresql.Driver;我是在我自己的机子上访问我自己建的数据库,谢谢各位了,请各位多多指教!
发表于 2003-7-8 15:30:07 | 显示全部楼层
建议:
try {
Connection conn;
Statement stmt;
ResultSet rset;

改动:Class.forName(driver).newInstance();// 与数据库建立连接
      DriverManager.registerDriver(driver);//注册数据库连接驱动
conn= DriverManager.getConnection("jdbcostgresql:testdb", "postgres", "");

error org.postgresql.Driver:是说明数据库驱动不正确
发表于 2003-7-8 15:38:23 | 显示全部楼层
jsp连接PostgreSQL数据库

testmysql.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<html>

<body>

<%Class.forName("org.postgresql.Driver").newInstance();

String url ="jdbc:postgresql://localhost/soft"

//soft为你的数据库名

String user="myuser";

String password="mypassword";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>

</body>

</html>

以上的代码是我在网上找到的,比较有人气,虽然我没有接触过PostgreSQL数据库,但相信应该对你有用。
发表于 2003-7-8 15:58:29 | 显示全部楼层
其实不管什么数据库都差不多,就是一个数据库SOURCE,写一个接口,然后每个连接方法实现它,这样做到数据库无关。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表