模仿某BBS項目的時候遇到的問題

 

1、在jsp中,打印出提示窗口的問題。我發現jsp中的跳轉語句與script腳本不能互用。也就是如果你使用了response.sendRedirect(url)那麼,即使沒有執行,alert語句也可能不能顯示出來。還沒有找出是什麼原因。

2、SQLServer數據庫的分頁問題
SQL code
取n到m條記錄的語句

a.select top m * from tablename where id not in (select top n id from tablename)

b.select top m * into 臨時表(或表變量) from tablename order by columnname -- 將top m筆插入
set rowcount n
select * from 表變量 order by columnname desc

c.select top n * from
(select top m * from tablename order by columnname) a
order by columnname desc

d.如果tablename裏沒有其他identity列,那麼:
select identity(int) id0,* into #temp from tablename

取n到m條的語句爲:
select * from #temp where id0 > =n and id0 <= m

如果你在執行select identity(int) id0,* into #temp from tablename這條語句的時候報錯,那是因爲你的DB中間的select into/bulkcopy屬性沒有打開要先執行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true

f..如果表裏有identity屬性,那麼簡單:
select * from tablename where identITycol between n and m

3、java中日期轉換形式:
new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) 返回String類型

4、爲什麼
String.valueOf(a);//不報錯
a.toString();//會報錯

a.首先傳遞參數是個賦值的過程,也就是說如果對任何引用變量傳遞爲null的對象的話,都是可以接受的,也就是編譯的時候不會出錯,但運行時出不出錯就要具體情況具體分析了,如果出錯那肯定是傳空指針異常。
例如同樣是static方法,同樣是傳遞參數,但是static String copyValueOf(char[] data)
會報錯。至於爲什麼會報錯就要看源代碼了。
b.還有就是在如果要調用一個類的成員方法或變量,那你必須要有他的實例,因爲java要知道某個實例的具體內存地址,除非是調用靜態方法或變量。雖然某類型變量的實例的指向null,但他還是能夠代表該類的,所以肯定能調用靜態方法。

5、javascript的問題,javascript的字符串

<INPUT id=userid type=hidden name=userid value=<%=userid %>> 如果userid是空的話,則userid.value="null"
注意這是加雙引號的。theform.userid.value == "null"

6、在where子句中如果要判斷的話,要加‘’的,不加會出錯,除非是int型的
String sql="select *from tb_user where login="+login+"and pwd="+pwd;
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]將 varchar 值 'admin001' 轉換爲數據類型爲 int 的列時發生語法錯誤
會發生如上錯誤。
改成String sql="select *from tb_user where login='"+login+"'and pwd='"+pwd+"'";就對了
其實很好理解的,注意'是在"裏面的,不要理解爲'"+login+"'爲固定格式,否則麻煩了,注意這就是句String類型的sql語句,就是吧正確的sql語句轉換成String類型

7、jdbc的問題:得出一個重要的結論就是如果對一個Connection,如果要做2次查詢,那麼createStatement幾個呢?一般是一次,但如果嵌套的話,就2次,否則會報錯,報object has closed錯誤,其實仔細想想就該知道錯誤處在哪了。仔細點就行。實在不行就弄2個,有時候不報錯,但查詢結果是錯誤的

8、在數據中如何調用另外個數據庫的表,MS-SQL SERVER
例如數據庫a,數據庫b
select * from b..table(在a中)

9、在sql2000中如何得到最後一次操作所影響記錄的ID號
可以使用select   @@identity方法,java可以使用
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rsKey = pstmt.getGeneratedKeys();
rsKey.next();
int key = rsKey.getInt(1);
rsKey.close();

10、在jsp中設置session失效時間

當客戶端發出第一個請求時(不管是被訪問網站的任何頁面)就會在此站點的服務其中開闢一塊內存空間,這塊內存就是session,session的銷燬有兩種方式,一種是session過期時間已到,會自動銷燬(注意這裏不是馬上就會銷燬,具體銷燬時間由Tomcat容器所決定)。在我們項目中的web.xml中就可以配置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
表示設置session過期時間爲30分鐘。值得注意的就是上面說的即使30分鐘到了session不一定會馬上銷燬,可以通過session監聽器測試得到每次session銷燬的時間都不一樣。如果要想安全的話就用下面第二種方法。在Tomcat的conf文件夾中的web.xml中可以找到Tomcat默認的session過期時間爲30分鐘。如果我們在我們的站點中配置了session過期時間Tomcat容器會以站點配置爲主,如果我們沒有在站點中配置session過期時間,將會以Tomcat下conf文件夾下的web.xml文件中配置的session過期時間爲準。
第二種銷燬方式通過手工方式銷燬,這種銷燬方式會立刻釋放服務器端session的資源,我們手動銷燬可以通過session().invalidate();實現。

11、MS-SQLSERVER的問題

a.安裝時的問題:問題簡述:
用戶 'sa' 登錄失敗。原因: 未與信任 SQL Server 連接相關聯。
這一問題一般是由於SQL Server未集成Windows身份驗證導致的,所以解決方案爲:
    打開SQL Server企業管理器。
    選擇服務器名稱上右鍵選擇“編輯SQL Server註冊屬性”,然後在對話框中選擇“使用windows身份驗 證”。
    試試一試,不行。在看看安全性設置
    同樣右鍵,選擇“屬性”,然後打開“安全性”選項卡。
    在選項卡中,選擇身份驗證爲“SQL Server和 Windows ”,其他不變

b.Can't start a cloned connection while in manual transaction mode錯誤2008-03-13 20:30出現Can't start a cloned connection while in manual transaction mode錯誤,從網上找到原因及解決辦法如下:
原因一般是當你在一個SQL SERVER的JDBC連接上執行多個STATEMENTS的操作,或者是手動事務狀態(AutoCommit=false) 並且使用默認的模式. direct (SelectMethod=direct) 模式.
解決辦法:
    當你使用手動事務模式時,必須把SelectMethod 屬性的值設置爲 Cursor, 或者是確保在你的連接只有一個STATEMENT操作。
    修改url
    加入SelectMethod=cursor即可
如:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ys;SelectMethod=Cursor;User=ys;Password=ys");

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章